小编Bri*_*ers的帖子

如何在同一对象中使用重复的属性名称反序列化JSON

我有一个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对象.由于这个原因,失败的属性类型是"对象".

c# serialization json.net

6
推荐指数
1
解决办法
6986
查看次数

如何干净地反序列化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)

c# json json.net deserialization

6
推荐指数
1
解决办法
1660
查看次数

在Json.Net中获取JObject的名称

我有一个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)

有一个更好的方法吗?

c# linq json.net

6
推荐指数
1
解决办法
7952
查看次数

双向链表到 JSON

我有一个三维结构......实际上是一个双向链表,有六个节点,即左、右、上、下、进、出。如果一个节点在另一个节点的右侧,那么该节点将明显位于第一个节点的左侧。喜欢

3D 实际数据结构的 2D 样本

实际上这是一个 3D 结构,但为了便于理解,我给出了一个 2D 示例。现在我必须将其转换为 JSON 格式,以便通过 WCF 将此数据发送到客户端,但由于它包含循环,因此无法将其转换为 JSON。我有这些问题

  1. 这种双向链表可以转成JSON吗?
  2. 有没有另一种方法可以做到这一点?
  3. 任何其他推荐的数据结构?如果使用双向链表这是不可能的。

我正在使用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)

c# json json.net data-structures doubly-linked-list

6
推荐指数
1
解决办法
3097
查看次数

使用json.net反序列化null regex属性

以下代码将引发异常:

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.

c# json.net

6
推荐指数
1
解决办法
479
查看次数

解析值后遇到意外字符:6. 路径 '[0]

我正在使用 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)

c# wpf json json.net

6
推荐指数
1
解决办法
2万
查看次数

使用Json.Net序列化模型时自动自动HtmlEncode字符串

有没有一种方法可以将Json.Net配置为自动编码所有字符串,例如HtmlEncode(myString)在对模型进行序列化时?

c# serialization html-encode json.net

6
推荐指数
2
解决办法
5753
查看次数

Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy

我正在 .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")].

预先感谢大家的帮助。

c# linq json json.net azure-cosmosdb

6
推荐指数
1
解决办法
2217
查看次数

使用C#.NET Core反序列化json

我试图反序列化我已经通过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)

c# serialization json .net-core datacontractjsonserializer

6
推荐指数
1
解决办法
9597
查看次数

如何按值对 JObject 进行排序

我有一些 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)

c# sorting json json.net

6
推荐指数
1
解决办法
5454
查看次数