Json 子数组的反序列化不包含值

Json Deserialisation with subarrays doesn't contain values

我正在尝试反序列化 json 对象。问题是对象还包含子数组 http://i.imgur.com/WWwEVLR.png

除了子阵列,一切正常。

我正在使用 Newtonsoft.Json;

这是我的课

    public string date_updated { get; set; }
    public string date_expires { get; set; }

这工作正常。

对于我这样做的子数组:

    public JsonArray contacts { get; set; }

这是我反序列化它的方法:

            var json = await webClient.GetAsync(new Uri(uri));
            var result = await json.Content.ReadAsStringAsync();
            Model = JsonConvert.DeserializeObject<Model>(result); 

数组创建得很好,包含所有需要的字段,但值不起作用。 值只是:Windows.Json.JsonObject 如下图所示。

http://i.imgur.com/Q8bpCoD.png

他为什么不写值?我怎样才能得到它们?

感谢您的帮助。

定义新的class

class Contact {
    public string type { get; set; }
    public string name { get; set; }
    // etc
}

并修改你的ReqInfo_WhoIs_Modelclass

public string date_updated { get; set; }
public string date_expires { get; set; }
public List<Contact> contacts { get; set; }

这些值工作正常。使用 JsonArray 告诉反序列化器将 JSON 数据转换为与 JsonArray 类型兼容的数据。此类型只是下方 JSON 字符串的 1:1 表示,不会自动为您反序列化为有用的数据。

此外,JsonArray 甚至不是 Json.Net 库的一部分。正如调试器告诉您的那样,它是 Windows.Data.Json 名称空间的一部分,该名称空间位于不同的库中。您仍然可以使用 class ( http://msdn.microsoft.com/en-us/library/windows.data.json.jsonobject.aspx ) 中的各种 Get 方法直接从每个 JsonObjects 访问数据,但这可能不是您想要的方式。

在您的情况下,您应该创建一个 class 来代表每个数组中的数据。如果不是数组中的所有条目都包含 class 的所有属性,请不要担心。 Json.Net 在反序列化时只会将它们的值留空。这看起来像:

public class Contact
{
    public string type { get; set; }
    public string name { get; set; }
    public string organization { get; set; }
    public string full_address { get; set; }

    etc.
}

为了更好地衡量,您还应该遵守 C# 命名约定,该约定规定属性应使用 CamelCase 名称。为了帮助您解决这个问题,您可以像这样使用 JsonProperty 属性:

public class Contact
{
    [JsonProperty("type")]
    public string Type { get; set; }

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

    [JsonProperty("organization")]
    public string Organization { get; set; }

    [JsonProperty("full_address")]
    public string FullAddress { get; set; }

    etc.
}

然后,您可以将contacts 属性的类型替换为List<Contact>,数据将自动反序列化为您可以轻松使用的格式。