Невозможно наложить объект типа "Newtonsoft.Json.Linq.JObject" на тип "Newtonsoft.Json.Linq.JArray"
Я тестирую свой веб-API. Издеваясь над данными, которые у меня есть:
var objs = ((JArray)JsonConvert.DeserializeObject("{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}")).Values<JObject>();
Который дает мне ошибку:
Невозможно создать объект типа Newtonsoft.Json.Linq.JObject, чтобы ввести 'Newtonsoft.Json.Linq.JArray'
Дело в том, что он работал. Я, должно быть, что-то изменил, но я не знаю, что.
Я намерен преобразовать этот объект JSON в список объектов .NET с именем Print
, который имеет следующие поля:
PrintId
Header
TX
CompnayRef
Ответы
Ответ 1
Просто создайте класс и десериализуйте его.
public class Print
{
public int PrintId { get; set; }
public string Header { get; set; }
public string TC { get; set; }
public string CompanyRef { get; set; }
}
Print printObj = JsonConvert.DeserializeObject<Print>(yourJson);
printObj.PrintId = //...
Ответ 2
Как говорится в сообщении, ваш объект является JObject
поэтому не JArray
его к JArray
. Попробуй это:
var objs = JsonConvert.DeserializeObject("{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}");
Обновление Чтобы получить коллекцию List<Print>
, ваш JSON должен быть массивом. Попробуйте это (я сделал ваш JSON массивом и добавил второй объект):
string json = "[{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}"
+ ",{ \"PrintId\":20,\"Header\":\"header2\",\"TC\":\"tc2\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}]";
var objs = JsonConvert.DeserializeObject<List<Print>>(json);
//The loop is only for testing. Replace it with your code.
foreach(Print p in objs){
Console.WriteLine("PrintId: " + p.PrintId);
Console.WriteLine("Header: " + p.Header);
Console.WriteLine("TC: " + p.TC);
Console.WriteLine("CompanyRef: " + p.CompanyRef);
Console.WriteLine("==============================");
}
public class Print
{
public int PrintId { get; set; }
public string Header { get; set; }
public string TC { get; set; }
public string CompanyRef { get; set; }
}
Вот скрипка.
Ответ 3
Для меня я поместил пустую строку в качестве объекта, который вызвал проблему, я переключился на "{}", который исправил мою проблему