У меня есть JSON, который я хочу сгладить в список <> объект. Я использую JsonConvert от Newtonsoft, и я настроил свои публичные классы для поддержки списка. Это следующие.Deserializing JSON Object в список C#
public class NewDocumentObject
{
public int ContractId { get; set; }
public int FolderId { get; set; }
public string CreatedAt { get; set; }
public string CreatedBy { get; set; }
public string TemplateReference { get; set; }
public bool IsTest { get; set; }
public bool IsExplicitName { get; set; }
public object Requester { get; set; }
public object ExternalReference { get; set; }
public object ExternalLabel { get; set; }
public string Status { get; set; }
public string StatusLabel { get; set; }
public int Share { get; set; }
public int EffectiveRight { get; set; }
public string Name { get; set; }
public object ModifiedAt { get; set; }
public object ModifiedBy { get; set; }
public object ModifiedById { get; set; }
public object ProfileReference { get; set; }
public object ESignatureId { get; set; }
public List<object> Documents { get; set; }
public object Folder { get; set; }
public object Session { get; set; }
public string ESignatureStatus { get; set; }
public List<object> Alerts { get; set; }
public List<Link> Links { get; set; }
}
public class Link
{
public string rel { get; set; }
public string method { get; set; }
public string href { get; set; }
}
JSON выглядит следующим образом.
{
"ContractId": 103,
"FolderId": 6,
"CreatedAt": "2016-02-18T11:30:17.293",
"CreatedBy": "SMTC",
"TemplateReference": "Non Disclosure Agreement",
"IsTest": false,
"IsExplicitName": false,
"Requester": null,
"ExternalReference": null,
"ExternalLabel": null,
"Status": "Incomplete",
"StatusLabel": "Incomplete",
"Share": 0,
"EffectiveRight": 3,
"Name": "Non Disclosure Agreement",
"ModifiedAt": null,
"ModifiedBy": null,
"ModifiedById": null,
"ProfileReference": null,
"ESignatureId": null,
"Documents": [],
"Folder": null,
"Session": null,
"ESignatureStatus": "",
"Alerts": [],
"Links": [{
"rel": "questionnaire",
"method": "get",
"href": "http://srv-dev-29/api/contracts/103/questionnaire/pages/1?navigate=first"
}, {
"rel": "answers",
"method": "get",
"href": "http://srv-dev-29/api/contracts/103/answers"
}, {
"rel": "documents",
"method": "get",
"href": "http://srv-dev-29/api/contracts/103/documents"
}, {
"rel": "template",
"method": "get",
"href": "http://srv-dev-29/api/templates/Non Disclosure Agreement"
}, {
"rel": "folder",
"method": "get",
"href": "http://srv-dev-29/api/folders/6"
}, {
"rel": "self",
"method": "get",
"href": "http://srv-dev-29/api/contracts/103"
}]}
Для десериализации JSON у меня есть следующая строка.
List<NewDocumentObject> newDoc = JsonConvert.DeserializeObject<List<NewDocumentObject>>(response.Content.ReadAsStringAsync().Result);
Это место, где оно падает. JsonConvertor бросает и исключает.
Невозможно десериализовать текущий объект JSON (например, {"name": "value"}) в тип 'System.Collections.Generic.List`1 [ContractExpressAPITest.Form1 + NewDocumentObject]', потому что для этого типа требуется массив JSON (например [1,2,3]) для десериализации. Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип, чтобы он был обычным типом .NET (например, не примитивным типом типа integer, а не типом коллекции как массив или список), которые можно десериализовать из объекта JSON. JsonObjectAttribute также можно добавить к типу, чтобы заставить его десериализовать объект JSON. Путь «ContractId», строка 1, позиция 14.
Я подозреваю, что это связано с тем, что он не может обрабатывать элементы списка в JSON.
Любой, кто может помочь?
Благодаря
Я добавил квадратные скобки к JSON, но он все равно бросает ту же ошибку. Я подозреваю, что я немного толстый. У меня есть другой список <> для некоторых JSON, которые работают отлично. Это список из 7 объектов. Однако это всего лишь 1 элемент со списком ссылок. – smitchelluk
«Или измените свой десериализованный вызов только на один объект». Как мы можем это сделать ? – shomaail