所以我试图解析一些由第三方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 []的内容为null。 (返回的每个对象都有一个Link对象,但link_name和link_id为null。)
我已检出this,this,this,this和this,但未能解决此问题。我正在寻找一个不需要第三方库的解决方案。 (根据我的主要负责人)。
我认为匹配JSON的类不存在问题,但如果有人想查看它,我可以发布完整的代码。
答案 0 :(得分:1)
您还需要一个类来正确反序列化
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);
答案 1 :(得分:-1)
JSON中的语法错误
在JSON数组中,最后一个元素后面没有','。
{
"status":"ok",
"links":
[
{
"link":
{
"link_name":"Sample",
"link_id":"9999"
}
}
],
这会有效!!