2

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

我正在通过这个反序列化器推动响应(取自这篇文章

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 , thisthis,但无法解决这个问题。我正在寻找不需要第三方库的解决方案。(根据我的主要开发人员)。

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

4

2 回答 2

3

您还需要一个类来正确反序列化它

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);
于 2012-09-06T16:46:50.617 回答
-1

它是 JSON 中的语法错误,

在 JSON 数组中,最后一个元素后面没有“,”。

 {
"status":"ok",
"links":
[
    {
        "link":
        {
            "link_name":"Sample",
            "link_id":"9999"
        }
    }
],

这将工作!

于 2012-09-06T16:37:17.147 回答