DataContractJsonSerializer来反序列化JSON

本文关键字:JSON 反序列化 DataContractJsonSerializer | 更新日期: 2023-09-27 18:21:23

我有一个Json字符串,如下所示,

{
    "ErrorDetails":null,
    "Success":true,
    "Records":[
                {
                "Attributes":[
                                {
                                    "Name":"accountid",
                                    "Value":null
                                },
                                {
                                    "Name":"accountidname",
                                    "Value":null
                                }
                ],
                "Id":"9c5071f7-e4a3-e111-b4cc-1cc1de6e4b49",
                "Type":"contact"
                }
    ]
}

我正在使用以下内容来反序列化这个字符串,

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(JSONPackage));
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
JSONPackage jsonResponse = objResponse as JSONPackage;

我的JSON包看起来如下,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CommonLibs.JSONObjects
{
    public class JSONPackage
    {
        public string ErrorDetails { get; set; }
        public string Success { get; set; }
        public List<Record> Records { get; set; }
    }
}

唱片公司是这样的,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace CommonLibs.JSONObjects
{
    public class Record
    {
        public List<Attributes> Attributes { get; set; }
        public string Id { get; set; }
        public string Type { get; set; }
    }
}

属性看起来像,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace CommonLibs.JSONObjects
{
    public class Attributes
    {
        public AttributeItem AttributeItem { get; set; }
    }
}

最后AttributeItem看起来如下,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace CommonLibs.JSONObjects
{
    public class AttributeItem
    {
        public string Name { get; set; }
        public string Value { get; set; }
    }
}

然而,这似乎并不奏效。

当我这样做的时候,

Console.WriteLine(jp.Records[0].Attributes[0].AttributeItem.Name);

我得到一个NullPointerException(jp是一个JSONPackage对象)。

但是,如果我这样做了,

Console.WriteLine(jp.Records[0].Attributes.Count) i get "2"

你能帮忙吗?

DataContractJsonSerializer来反序列化JSON

您不需要Attributes类。

更改

public List<Attributes> Attributes { get; set; }

public List<AttributeItem> Attributes { get; set; }