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

前端 未结 3 1823
-上瘾入骨i
-上瘾入骨i 2020-12-17 09:46

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

var objs = ((JArray)JsonConvert.DeserializeObject(\"{ \\\"PrintId\\\":10,\\\"Header\\\":\\\"header\\\"         


        
相关标签:
3条回答
  • 2020-12-17 10:00

    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.

    0 讨论(0)
  • 2020-12-17 10:01

    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 = //...
    
    0 讨论(0)
  • 2020-12-17 10:08

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

    0 讨论(0)
提交回复
热议问题