无法将“Newtonsoft.Json.Linq.JObject”类型的对象强制转换为“Newtonsoft.Json.Linq.JArray”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法将“Newtonsoft.Json.Linq.JObject”类型的对象强制转换为“Newtonsoft.Json.Linq.JArray”相关的知识,希望对你有一定的参考价值。

我正在测试我的Web 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对象转换为名为Print的.NET对象列表,其中包含以下字段:

PrintId
Header
TX
CompnayRef
答案

只需创建一个类并反序列化它。

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 = //...
另一答案

正如消息所说,你的对象是JObject所以不要把它投到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; }
}

这是一个fiddle

以上是关于无法将“Newtonsoft.Json.Linq.JObject”类型的对象强制转换为“Newtonsoft.Json.Linq.JArray”的主要内容,如果未能解决你的问题,请参考以下文章

无法将“Newtonsoft.Json.Linq.JObject”类型的对象强制转换为“Newtonsoft.Json.Linq.JArray”

无法将“Newtonsoft.Json.Linq.JArray”类型的对象转换为“System.Collections.Generic.List”类型

无法将类型'Newtonsoft.Json.Linq.JObject'的对象转换为类型

无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“System.Collections.Generic.Dictionary`2[System.String,S

C# 无法访问 Newtonsoft.Json.Linq.JProperty 上的子值

动态 Json - 无法访问 Newtonsoft.Json.Linq.JValue 上的子值