解析嵌套的JSON - 子属性为null

时间:2012-09-06 16:18:03

标签: c# json

所以我试图解析一些由第三方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。)

我已检出thisthisthisthisthis,但未能解决此问题。我正在寻找一个不需要第三方库的解决方案。 (根据我的主要负责人)。

我认为匹配JSON的类不存在问题,但如果有人想查看它,我可以发布完整的代码。

2 个答案:

答案 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"
        }
    }
],

这会有效!!