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"
你能帮忙吗?
您不需要Attributes
类。
更改
public List<Attributes> Attributes { get; set; }
至
public List<AttributeItem> Attributes { get; set; }