1

我在不知道索引的情况下尝试按照 C# 中的示例 Parsing json 进行操作。我一直遇到一个错误:

Newtonsoft.Json.Linq.JObject' 不包含 ip_addresses 的定义

我想要实现的是解析以下 JSON 并将每个 ip 地址添加到 ObservableCollection。如果我知道密钥但IP地址可以命名任何东西,这一切都很好。

这是我目前正在处理的代码,IP 地址有它自己的类的原因是因为稍后在应用程序中还有很多事情要做:

    try
    {
        dynamic jObj = JsonConvert.DeserializeObject(e.Result);
        foreach (var child in jObj.ip_addresses.Children())
        {
            ips.Add(new IpAddresses() { ip = child });
        }
    }
    catch
    {
        MessageBox.Show("Generic error message");
    }

    public class IpAddresses
    {
        public string ip { get; set; }
    }

这是 JSON:

{
    "id": "reallysimpleid",
    "label": "server name",
    "ip_addresses": {
    "private0_v4": "100.100.100.100",
    "access_ip0_v4": "100.100.100.100",
    "public0_v6": "1000:1000:7805:0113:9073:8c63:1000:1000",
    "access_ip1_v6": "1000:1000:7805:0113:9073:8c63:1000:1000",
    "public1_v4": "100.100.100.100"
},
    "metadata": null,
    "managed": false,
    "uri": "https://www.awebsite.com",
    "agent_id": null,
    "created_at": 1360960027217,
    "updated_at": 1360960027217
}
4

2 回答 2

0

你的班级应该是这样的:

     public class IpAddresses
     {
     public string private0_v4 { get; set; }
     public string access_ip0_v4 { get; set; }
     public string public0_v6 { get; set; }
     public string access_ip1_v6 { get; set; }
     public string public1_v4 { get; set; }
     }

     public class RootObject
     {
     public string id { get; set; }
     public string label { get; set; }
     public IpAddresses ip_addresses { get; set; }
     public object metadata { get; set; }
     public bool managed { get; set; }
     public string uri { get; set; }
     public object agent_id { get; set; }
     public long created_at { get; set; }
     public long updated_at { get; set; }
     }

您的代码应该是:

     jObj = JsonConvert.DeserializeObject<RootObject>(e.Result);
于 2013-02-26T15:16:55.760 回答
0

child对象可能不是您想要的,因为它是一个JProperty对象;如果您需要的只是字符串 IP 地址,请使用以下命令:

ips.Add(new IpAddresses() { ip = child.Value.ToString() });
于 2013-02-26T15:59:07.393 回答