Невозможно наложить объект типа "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

Для меня я поместил пустую строку в качестве объекта, который вызвал проблему, я переключился на "{}", который исправил мою проблему