Json 反序列化无法访问对象的属性
Json Deserialization can't access attributes of object
我得到了这个 class(通过使用 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 是机密
如果您尝试反序列化 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
您必须使用具有 RootObject
类型的反序列化器,因为它具有匹配的属性 data
、paging
和 summary
。
我得到了这个 class(通过使用 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 是机密
如果您尝试反序列化 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
您必须使用具有 RootObject
类型的反序列化器,因为它具有匹配的属性 data
、paging
和 summary
。