我正在尝试反序列化一个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
他为什么不写价值观?我怎么能得到它们?
感谢您的帮助。
答案 0 :(得分:1)
定义新类
class Contact {
public string type { get; set; }
public string name { get; set; }
// etc
}
并修改您的ReqInfo_WhoIs_Model
班级
public string date_updated { get; set; }
public string date_expires { get; set; }
public List<Contact> contacts { get; set; }
答案 1 :(得分:1)
价值观正常。使用JsonArray告诉反序列化器将JSON数据转换为与JsonArray类型兼容的东西。此类型只是下面的JSON字符串的1:1表示形式,不会自动反序列化为有用的数据。
此外,JsonArray甚至不是Json.Net库的一部分。正如调试器告诉你的那样,它是Windows.Data.Json命名空间的一部分,它位于不同的库中。您仍然可以使用类中的各种Get方法(http://msdn.microsoft.com/en-us/library/windows.data.json.jsonobject.aspx)直接从每个JsonObjects访问数据,但这可能不是您想要的方式。
在您的情况下,您应该创建一个表示每个阵列中的数据的类。如果并非数组中的所有条目都包含您班级的所有属性,请不要担心。反序列化时,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>
,数据将自动反序列化为您可以轻松使用的格式。