DataContractJsonSerializer用于反序列化JSON

时间:2014-09-10 08:28:41

标签: c# json

我有一个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;

我的JSONPackage如下所示,

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"

你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

您不需要Attributes课程。

更改

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

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

相关问题