",c#,json,json.net"/>

首页 > 解决方案 > 获取对象值字典数组的对象的值“字典"

问题描述

我正在寻找反序列化一个 json 对象,并且在我的 json 类中,我有一个 type 属性Dictionary<string, Name[]>

Names反序列化我的 json 数据后如何访问属性?

json

{
    "cache": [ {
        "data": {
            "names": {
                "1": [{
                    "firstname": "John",
                    "secondname": "Doe"
                }],
                "2": [{
                     "firstname": "Alice",
                    "secondname": "Smith"
                }],
                "3": [{
                     "firstname": "John",
                    "secondname": "John"
                }]
            }
        }
    }]
}

json类

// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
//    using Sample;
//
//    var jsonRoot = JsonRoot.FromJson(jsonString);
namespace Sample
{
    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class JsonRoot
    {
        [JsonProperty("cache")]
        public Cache[] Cache { get; set; }
    }

    public partial class Cache
    {
        [JsonProperty("data")]
        public Data Data { get; set; }
    }

    public partial class Data
    {
        [JsonProperty("names")]
        public Dictionary<string, Name[]> Names { get; set; }
    }

    public partial class Name
    {
        [JsonProperty("firstname")]
        public string Firstname { get; set; }

        [JsonProperty("secondname")]
        public string Secondname { get; set; }
    }
}

标签: c#jsonjson.net

解决方案


你可以做这样的事情来打印 Key 和 FirstName

var obj = JsonConvert.DeserializeObject<JsonRoot>(json);
foreach (KeyValuePair<string, Name[]> name in obj.Cache.FirstOrDefault().Data.Names)
{
    Console.WriteLine(name.Key + " " + name.Value.First().Firstname);
}

您的缓存是一个数组,您可以找到一种方法来遍历其中的每一个......对于这个例子,我使用了FirstOrDefault().

在 foreach 循环中,我打印每个元素的第一个元素,因为这就是 json 示例中的所有元素,但是如果有更多对象Name[],您可以通过迭代每个对象来详细说明该方法。Name

// Prints
1 John
2 Alice
3 John

推荐阅读