我有一个JSON字符串,我希望包含重复键,我无法让JSON.NET满意.
我想知道是否有人知道(也许使用的最佳方法JsonConverter?)来获得JSON.NET更改JObject的孩子JObjects进入到JArrays当它看到重复键的名字呢?
// For example: This gives me a JObject with a single "JProperty\JObject" child.
var obj = JsonConvert.DeserializeObject<object>("{ \"HiThere\":1}");
// This throws:
// System.ArgumentException : Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject.
obj = JsonConvert.DeserializeObject<object>("{ \"HiThere\":1, \"HiThere\":2, \"HiThere\":3 }");
Run Code Online (Sandbox Code Playgroud)
我试图反序列化的实际JSON要复杂得多,并且重复项嵌套在多个级别.但上面的代码说明了为什么它失败了.
我知道JSON是不正确的,这就是为什么我要问JSON.NET是否有办法解决这个问题.为了论证,我们说我无法控制JSON.实际上我确实为父对象使用特定类型,但遇到问题的特定属性将是字符串或另一个嵌套的JSON对象.由于这个原因,失败的属性类型是"对象".
我想将一些奇怪的JSON反序列化为C#类:
{
"Result": {
"Client": {
"ProductList": {
"Product": [
{
"Name": {
"Name": "Car polish"
}
}
]
},
"Name": {
"Name": "Mr. Clouseau"
},
"AddressLine1": {
"AddressLine1": "Hightstreet 13"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
json2csharp为JSON生成以下类:
public class Name
{
public string Name { get; set; }
}
public class Product
{
public Name Name { get; set; }
}
public class ProductList
{
public List<Product> Product { get; set; }
}
public class Name2
{
public string Name …Run Code Online (Sandbox Code Playgroud) 我有一个JObject等于:
"Info":
{
"View":"A",
"Product":"B",
"Offer":"Offer1",
"Demo":"body {background-color:red;} #box {border:dotted 50px red;}",
"Log":false
}
Run Code Online (Sandbox Code Playgroud)
如何返回对象的名称"Info"?
我目前正在使用这样的Path属性:
jObject.Name = jObject.Path.Substring(jObject.Path.jObject('.') + 1);
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
我有一个三维结构......实际上是一个双向链表,有六个节点,即左、右、上、下、进、出。如果一个节点在另一个节点的右侧,那么该节点将明显位于第一个节点的左侧。喜欢

实际上这是一个 3D 结构,但为了便于理解,我给出了一个 2D 示例。现在我必须将其转换为 JSON 格式,以便通过 WCF 将此数据发送到客户端,但由于它包含循环,因此无法将其转换为 JSON。我有这些问题
我正在使用Json.Net来处理 JSON。
我的班级是
public class Node
{
public Document document = null;
public Node left = null;
public Node right = null;
public Node up = null;
public Node down = null;
public Node inside = null;
public Node outside = null;
}
Run Code Online (Sandbox Code Playgroud) 以下代码将引发异常:
class SimpleClassWithRegex
{
public Regex RegProp { get; set; }
}
[TestMethod]
public void RegexTest()
{
string json = JsonConvert.SerializeObject(new SimpleClassWithRegex {RegProp = null});
// json = {"RegProp":null}
SimpleClassWithRegex obj = JsonConvert.DeserializeObject<SimpleClassWithRegex>(json);
//Above line throws a JsonSerializationException
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很奇怪,有人可以解释为什么这不是一个bug吗?或者也许建议一个解决方法?实例化一个Regex对象代替null当然会阻止它抛出异常.
产生的例外是:
Newtonsoft.Json.JsonSerializationException: Unexpected token when reading Regex. Path 'RegProp', line 1, position 15.
我正在使用 Newtonsoft 库 (Json.Net) 从文件中解析 JSON 对象。我在jsonlint.com验证了 JSON ,它是有效的。
但是当我说:
using (StreamReader sr = new StreamReader(path))
{
json = await sr.ReadToEndAsync();
}
ContactsCollection = JsonConvert.DeserializeObject<List<Contact>>(json); //error
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
解析值后遇到意外字符:6. 路径 '[0]
所以我放了一个断点,json = await sr.ReadToEndAsync();显示的 JSON 值是:
"\0{\0\"\0F\0i\0r\0s\0t\0N\0a\0m\0e\0\"\0:\0\"\0N\0i\0k\0h\0\"\0,\0\"\0L\0a\0s\0t\0N\0a\0m\0e\0\"\0:\0\"\0A\0N\0S\0\"\0,\0\"\0D\0a\0t\0e\0O\0f\0B\0i\0r\0t\0h\0\"\0:\0\"\01\02\0/\07\0/\01\09\08\09\0 \01\02\0:\00\00\0:\00\00\0 \0A\0M\0\"\0,\0\"\0W\0e\0i\0g\0h\0t\0\"\0:\01\06\08\0.\00\0,\0\"\0H\0e\0i\0g\0h\0t\0\"\0:\01\06\08\0.\00\0,\0\"\0P\0h\0o\0n\0e\0\"\0:\0\"\0(\08\00\05\0)\0 \02\05\01\0-\01\00\01\05\0\"\0}\0]\0"
这是我的实际 JSON:
[{
"FirstName":"Nikh",
"LastName":"ANS",
"DateOfBirth":"12/7/1989 12:00:00 AM",
"Weight":168.0,
"Height":168.0,
"Phone":"(805) 251-1015"
}]
Run Code Online (Sandbox Code Playgroud)
这是我的 Contact 类:
public class Contact : INotifyPropertyChanged
{
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{ …Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以将Json.Net配置为自动编码所有字符串,例如HtmlEncode(myString)在对模型进行序列化时?
我正在 .Net 中为 Cosmos DB 创建一个存储库,为了保持 DRY 并避免用 装饰每个类属性[JsonProperty(PropertyName = "thePropertyName")],我用 .Net 装饰了我的类 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]。
CreateDocumentAsync(例如)使用属性的驼峰式大小写名称正确序列化 JSON 格式的 Cosmos DB 文档。到目前为止,一切都很好。
然而,我的问题是,当我通过 LINQ 查询 Cosmos DB 时,它生成的用于查询 COSMOS DB 的 SQL 不尊重[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]装饰类的属性,因此不会返回任何文档。这是因为 Cosmos DB 查询对于字段/属性名称区分大小写。例如,以下命令会产生不同的结果(请注意名称的大小写差异):
SELECT * FROM c WHERE c.name = "Health"
Run Code Online (Sandbox Code Playgroud)
与
SELECT * FROM c WHERE c.Name = "Health"
Run Code Online (Sandbox Code Playgroud)
我通过检查 生成的查询 SQL 确认了这一点CreateDocumentQuery,并寻找了可以允许我指示属性名称大小写的选项,但SqlQuerySpec没有成功。
所以,我的问题是:有谁知道如何在 Cosmos Db 中使用类定义的驼峰式大小写策略进行 LINQ 查询,而不必通过[JsonProperty(PropertyName = "thePropertyName")].
预先感谢大家的帮助。
我试图反序列化我已经通过JSON格式POST但有一些问题的数据.
错误消息是:
SerializationException:期望状态'Element'..遇到名为'',namespace''的'Text'.System.Runtime.Serialization.XmlObjectSerializerReadContext.HandleMemberNotFound(XmlReaderDelegator的XMLReader,ExtensionDataObject extensionData,INT memberIndex)
发生序列化的控制器:
public String RequestToken(string userData)
{
Contract.Ensures(Contract.Result<string>() != null);
UserModel deserializedUser = new UserModel();
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(userData));
ms.Position = 0;
DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
deserializedUser = ser.ReadObject(ms) as UserModel;
}
Run Code Online (Sandbox Code Playgroud)
用作合同的UserModel:
using System;
using System.Runtime.Serialization;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace WishareIntegrationApi.Entities
{
[DataContract]
public class UserModel
{
[BsonId]
[BsonRepresentation(BsonType.String)]
[DataMember]
public ObjectId _id { get; set; }
[DataMember]
public string displayName { get; set; }
[DataMember]
public string photoURL { get; set; …Run Code Online (Sandbox Code Playgroud) 我有一些 JSON:
{
"AI": "1",
"AJ": "0",
"AM": "0",
"AN": "0",
"BK": "5",
"BL": "8",
"BM": "0",
"BN": "0",
"BO": "4",
"CJ": "0",
"CK": "2"
}
Run Code Online (Sandbox Code Playgroud)
我想按数字从高到低排序,并通过编写 JSON 的第一个索引来获取数字最高的属性。你能帮助我吗?
这是我到目前为止:
string voteJson = File.ReadAllText("vote.json");
Object voteObj = JObject.Parse(voteJson);
//How to sort the object here?
//Saving it
string output = Newtonsoft.Json.JsonConvert.SerializeObject(voteObj,
Newtonsoft.Json.Formatting.Indented);
File.WriteAllText("vote-sorted.json", output);
Run Code Online (Sandbox Code Playgroud)