Json反序列化无法访问对象的属性

时间:2016-02-02 23:27:06

标签: c# json serialization win-universal-app

我得到了这个课(使用json2c#):

 public class Friends
{
    public class Datum
    {
        public string name { get; set; }
        public string id { get; set; }

    }

    public class Paging
    {
        public string next { get; set; }
    }

    public class Summary
    {
        public int total_count { get; set; }
    }

    public class RootObject
    {
        public List<Datum> data { get; set; }
        public Paging paging { get; set; }
        public Summary summary { get; set; }
    }
}

这是我对反序列化的不良尝试:

                DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Friends));
                MemoryStream ms = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(data));
                Friends x = (Friends)js.ReadObject(ms);

我以为我应该能够访问例如Friends.Datum.name但它不起作用。

我的问题是,我做错了什么?我应该如何优化我的代码?

我已经为我的ListView获得了一个DataTemplate,并且我使用了MVVM模式,所以绑定应该不是什么大问题。

这是json响应的一个例子:

    {"data":[{"name":"XXX","id":"XXX"}],"paging":{"next":"https:\/\/graph.facebook.com\/v2.5\/XXX\/friends?access_token=X"},"summary":{"total_count":2}}        

XXX是秘密的

2 个答案:

答案 0 :(得分:1)

如果您尝试反序列化RootObject而不是Friends对象,则代码应该有效。还要记得使用using语句来确保在流上调用Dispose。

DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(RootObject));

using (MemoryStream ms = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(data)));
{
RootObject x = (RootObject)js.ReadObject(ms);
}

然后您可以像

一样访问它
x.summary.total_count 

答案 1 :(得分:1)

您必须使用具有$totalcntaccess = get_tptn_post_count_only( $id, 'total', $blog_id );类型的反序列化器,因为它具有匹配的属性RootObjectdatapaging