繁体   English   中英

使用 JSON.Net 解析具有唯一字符串的 JSON 对象作为父对象

[英]Parse JSON Objects with unique strings as parents using JSON.Net

假设我有这个例子 JSON:

"Test": {
        "KIf42N7OJIke57Dj6dkh": {
            "name": "test 1"
        },
        "xsQMe4WWMu19qdULspve": {
            "name": "test 2"
        }
}

我想将其解析为我拥有的自定义 class 的数组,下面将举例说明:

class Class1 {

    public string Name { get; set; }

    Class1(string name) {
        Name = name;
    }

}

如何使用 Json.NET 的JObject.Parse解析这个?

您可以使用JPath查询来实现您的目标,如下所示:

var myArray = JObject
    .Parse(json)
    .SelectTokens("$.Test..name")
    .Values<string>()
    .Select(s => new Class1(s))
    .ToArray();

但可能不是最好的方法。

我个人更喜欢创建类来表示 json 结构,然后应用转换。

void Main()
{
    var json = @"{""Test"": {
        ""KIf42N7OJIke57Dj6dkh"": {
            ""name"": ""test 1""
            },
            ""xsQMe4WWMu19qdULspve"": {
            ""name"": ""test 2""
            }
    }
    }";

    var root = JsonConvert.DeserializeObject<Root>(json);
    var array = root.Test.Select(i => i.Value).ToArray();
    array.Dump();
}

public class Root
{
    public Dictionary<string, Class1> Test { get; set; }
}

public class Class1
{

    public string Name { get; set; }

    public Class1(string name)
    {
        Name = name;
    }
}

首先,您的 Json 缺少开始/结束大括号。 Json 需要有环绕测试值的大括号。

{
    'Test': 
    {
            'KIf42N7OJIke57Dj6dkh': {'name': 'test 1'},
            'xsQMe4WWMu19qdULspve': {'name': 'test 2'}
    }
}

如果您在原始 Json 中缺少它,您可以将当前输入 Json 包装如下。

var correctedJson = $"{{{inputJsonString}}}";

如果您想在创建其他具体数据结构和使用JPath 查询的情况下将 Json 对象解析为Class1的数组,则可以使用Anonymous Types ,使用 Json.Net 证明的DeserializeAnonymousType方法。 例如,

var sampleObject = new {Test = new Dictionary<string,Class1>()};
var data = JsonConvert.DeserializeAnonymousType(correctedJson,sampleObject);
var result = data.Test.Select(x=>x.Value).ToArray();

您也可以使用 JPath Query 或创建具体数据结构作为@Kalten 来实现它,如他的回答中所述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM