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

假设我有这个 JSON 示例:


"Test": {

        "KIf42N7OJIke57Dj6dkh": {

            "name": "test 1"

        },

        "xsQMe4WWMu19qdULspve": {

            "name": "test 2"

        }

}

我想将其解析为我拥有的自定义类的数组,如下所示:


class Class1 {


    public string Name { get; set; }


    Class1(string name) {

        Name = name;

    }


}

我如何使用 Json.NET 解析它JObject.Parse?


慕村9548890
浏览 84回答 2
2回答

隔江千里

您可以使用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;    }}

慕哥9229398

首先,您的 Json 缺少开始/结束大括号。Json 需要用大括号括住 Test 值。{    'Test':     {            'KIf42N7OJIke57Dj6dkh': {'name': 'test 1'},            'xsQMe4WWMu19qdULspve': {'name': 'test 2'}    }}如果原始 Json 中缺少它,您可以将当前输入的 Json 包装如下。var correctedJson = $"{{{inputJsonString}}}";如果您想将 Json 对象解析为数组Class1 而不创建额外的具体数据结构并使用JPath Queries,您可以使用Json.Net 证明的DeserializeAnonymousTypeAnonymous Types方法来实现此目的。例如,var sampleObject = new {Test = new Dictionary<string,Class1>()};var data = JsonConvert.DeserializeAnonymousType(correctedJson,sampleObject);var result = data.Test.Select(x=>x.Value).ToArray();您还可以使用 JPath 查询或创建具体数据结构作为@Kalten 来实现它,如他的答案中所述。
打开App,查看更多内容
随时随地看视频慕课网APP