c# – 如何使用对象反序列化对象作为其值

我在泡菜.我找不到如何反序化这个json.我在网上找到的所有内容都谈到了如何处理键值/值,其中值是类型而不是对象.在这种情况下,值是一个内部具有附加键/值的对象.

另外,你在“领土”之后看到的像长串的长指针是不一样的……

我如何使用JSON.NET反序列化?我希望能够获得ID和名称.

谢谢您阅读此篇

{
  "territories":{
    "6368e494-c47c-4678-89de-45f3bfc35247":{
      "id":"6368e494-c47c-4678-89de-45f3bfc35247",
      "name":"Atlanta Camera Operations",
      "center":[
        33748995,
        -84387983
      ],
      "timeZoneCode":"America/New_York",
      "languageCode":"en"
    },
    "4d998d4c-fcc6-4fdc-9e73-3f2e7515ee47":{
      "id":"4d998d4c-fcc6-4fdc-9e73-3f2e7515ee47",
      "name":"Atlanta Operations",
      "center":[
        33748995,
        -84387983
      ],
      "timeZoneCode":"America/New_York",
      "languageCode":"en"
    }
  }
}

最佳答案 这是一个将保存领土信息的类:

class Territory
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("center")]
    public IList<int> Center { get; set; }

    [JsonProperty("timeZoneCode")]
    public string TimeZoneCode { get; set; }

    [JsonProperty("languageCode")]
    public string LanguageCode { get; set; }
}

然后你可以像这样逐个反序列化它们:

string myJsonText = "your json here";

var jsonObject = JObject.Parse(myJsonText);
var territoriesToken = jsonObject["territories"];

我们遍历孩子们并反序列化它们:

var territoriesList = new List<Territory>();
foreach (var child in territoriesToken.Children())
{
    var territory = child.First.ToObject<Territory>();
    territoriesList.Add(territory);
}

或者,如果您更喜欢LINQ one liners,您可以使用:

var territoriesList = territoriesToken.Children()
                      .Select(child => child.First.ToObject<Territory>())
                      .ToList();

然后,您可以像使用任何其他C#对象一样访问名称和ID

territoriesList[0].Id
territoriesList[0].Name
点赞