所以我试图解析第三方 api 返回给我的一些 JSON,如下所示:
{
"status":"ok",
"links":
[
{
"link":
{
"link_name":"Sample",
"link_id":"9999"
}
},
],//and so on with other nested properties
我已经创建了将 JSON 映射到的类
[DataContract]
public class JsonTestResults
{
[DataMember]
public string status { get; set; }
[DataMember]
public IEnumerable<Link> links { get; set; }
}
[DataContract]
public class Link
{
[DataMember]
public string link_name { get; set; }
[DataMember]
public string link_id { get; set; }
}
我正在通过这个解串器推送响应(取自 this post
public T Deserialise<T>( string json )
{
T obj = Activator.CreateInstance<T>( );
using (MemoryStream ms = new MemoryStream( Encoding.Unicode.GetBytes( json ) ))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer( obj.GetType( ) );
obj = (T)serializer.ReadObject( ms );
return obj;
}
}
但是,我的反序列化结果显示 Link[] 的内容为空。 (每返回一个Link对象,但link_name和link_id为空。)
我已经查看了this , this , this , this和 this ,但一直没能解决这个问题。我正在寻找一种不需要第三方库的解决方案。 (根据我的首席开发人员)。
我不认为这是与 JSON 匹配的类的问题,但如果有人想查看它,我可以发布完整的代码。
最佳答案
您还需要一个类才能正确反序列化它
public class JsonTestResults
{
public string status { get; set; }
public IEnumerable<TempLink> links { get; set; }
}
public class TempLink
{
public Link link;
}
public class Link
{
public string link_name { get; set; }
public string link_id { get; set; }
}
我用Json.Net测试了它并工作了。
var obj = JsonConvert.DeserializeObject <JsonTestResults>(json);
JavaScriptSerializer
也可以工作
var obj2 = new JavaScriptSerializer().Deserialize<JsonTestResults>(json);
关于c# - 解析嵌套 JSON——子属性为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12304270/