时间:2019-03-17 标签:c#DataContractJsonSerializer返回null

标签 c# json serialization datacontractjsonserializer

你好,我有这个代码:

通过 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/

相关文章:

c# - 将参数传递给 ASP.NET Core 中的 jQuery 加载函数

c# - 在任意位置的两个分隔符之间获取子字符串

ios - 等待数据加载到模型中,然后再在 ViewController 中访问它们

json - 拒绝对 Nginx 中特定路径的所有 json 文件的请求

c++ - 如何使用 Protocol Buffers 将多态对象数组序列化为文件?

c# - 使用 X509Certificate2 签署和验证 ECDSA-SHA256 签名

c# - 如何使用 NPOI 获得非参差不齐的右列

javascript - 如何从 Express Node.js 中的对象请求数据转换为字符串

swift - JSONEncoder 的 dateEncodingStrategy 不工作

c - 将数据序列化为连续数组