你好,我有这个代码:
通过 HttpClient 我收到这个 json 字符串:
{"group":3,"data":[{"count":1,"providerName":"BetaDigital","providerNo":12},{"count":139,"providerName":"Free to air","providerNo":1}]}
var serializer = new DataContractJsonSerializer(typeof(GroupProvider));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
var data = (GroupProvider) serializer.ReadObject(ms);
然后我有这样的类(class):
[DataContract]
public class GroupProvider
{
public int Group { get; set; }
public DataGroupProvider[] data { get; set; }
}
[DataContract]
public class DataGroupProvider
{
public int Count { get; set; }
public string ProviderName { get; set; }
public int ProviderNo { get; set; }
}
问题是,只有 Group 被填充,而 DataGroupProvider 为空..
问题出在哪里?
最佳答案
如 Data Contract Basics 中所述,您要么不放置 DataContract
属性,在这种情况下,每个公共(public)属性或字段都会被考虑(但请注意,名称应该完全匹配),或者放置 DataContract
属性,然后您需要使用 DataMember
属性显式标记要考虑的成员。后者还允许您更改名称映射。
因此,您的示例 JSon 可以使用以下数据模型进行反序列化(注意属性名称大小写):
public class GroupProvider
{
public int group { get; set; }
public DataGroupProvider[] data { get; set; }
}
public class DataGroupProvider
{
public int count { get; set; }
public string providerName { get; set; }
public int providerNo { get; set; }
}
或保留您当前的属性名称:
[DataContract]
public class GroupProvider
{
[DataMember(Name = "group")]
public int Group { get; set; }
[DataMember]
public DataGroupProvider[] data { get; set; }
}
[DataContract]
public class DataGroupProvider
{
[DataMember(Name = "count")]
public int Count { get; set; }
[DataMember(Name = "providerName")]
public string ProviderName { get; set; }
[DataMember(Name = "providerNo")]
public int ProviderNo { get; set; }
}
关于时间:2019-03-17 标签:c#DataContractJsonSerializer返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38421152/