【发布时间】:2015-09-28 05:32:26
【问题描述】:
我的 JSON 字符串如下所示,需要反序列化为下面的类
{
"Id":"1",
"Names":{
"string":"Surya"
},
"ClassTypes":{
"Types":[
{
"TypeId":"1",
"TypeName":"First Name"
},
{
"TypeId":"2",
"TypeName":"Last Name"
}
]
},
"Status":"1",
"DOB":"23/12/2014"
}
类定义
public class MyClass
{
public int Id { get; set; }
public IList<string> Names { get; protected set; }
public IList<Types> ClassTypes { get; protected set; }
public StatusType Status { get; set; }
public DateTime DOB { get; set; }
public MyClass()
{
Names = new List<string>();
ClassTypes = new List<Types>();
Status = StatusType.Active;
}
}
public class Types
{
public int TypeId { get; set; }
public string TypeName { get; set; }
}
public enum StatusType
{
Active = 0,
InActive = 1
}
我已经使用以下代码进行反序列化,但出现错误
var serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new IncludeNonPublicMembersContractResolver();
JsonConvert.DeserializeObject<MyClass>(jsonString, serializerSettings);
public class IncludeNonPublicMembersContractResolver : DefaultContractResolver
{
public IncludeNonPublicMembersContractResolver()
{
DefaultMembersSearchFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
}
protected override List<MemberInfo> GetSerializableMembers(Type objectType)
{
var members = base.GetSerializableMembers(objectType);
return members.Where(m => !m.Name.EndsWith("k__BackingField")).ToList();
}
}
错误详情
无法反序列化当前 JSON 对象(例如 {"name":"value"}) 进入类型 'System.Collections.Generic.IList`1[System.String]' 因为 该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。
要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3]) 或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,不是集合类型 像数组或列表)可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型中以强制它 从 JSON 对象反序列化。
路径“Names.string”,第 1 行,位置 28。
注意 - 我不能通过 JSON 字符串和更通用的解决方案进行更改,其他类也需要这样做:(
【问题讨论】:
标签: c# json serialization json.net