Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Newtonsoft.Json.Linq.JArray'

大城市里の小女人 提交于 2020-01-22 17:30:12

问题


I am testing my Web API. Mocking the data I have this:

var objs = ((JArray)JsonConvert.DeserializeObject("{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}")).Values<JObject>();

Which gives me the error:

Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Newtonsoft.Json.Linq.JArray'

The thing is it was working. I must have changed something, but I don't know what.

My intent is to convert this JSON object to a list of .NET objects called Print which has the fields:

PrintId
Header
TX
CompnayRef

回答1:


Just make a class and deserialize it.

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:


As the message says, your object is JObject so don't cast it to JArray. Try this:

var objs = JsonConvert.DeserializeObject("{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}");

Update To get a collection List<Print>, your JSON needs to be an array. Try this (I made your JSON an array and added a second object):

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; }
}

Here is a fiddle.




回答3:


For me I was putting empty string as an object which caused the issue, I switched to "{}" which fixed my issue



来源:https://stackoverflow.com/questions/33495634/unable-to-cast-object-of-type-newtonsoft-json-linq-jobject-to-type-newtonsoft

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!