Я бы мой JSON строку, как показано ниже, которая должна быть десериализован к ниже классаC# JSON Строка десериализации с помощью Json.NET
{
"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 строки и решения более общего имеет это требовалось бы для других классов, а также: (
Upvote для json2csharp :) – niksofteng
Я искал код десериализации строки JSON в объекте класса – suryakiran
@suryakiran и почему мой ответ вам не поможет? – Backs