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

And*_*son 13 c# json.net asp.net-web-api

我正在测试我的Web API.模拟我有这个数据:

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

这给了我错误:

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

事情是工作.我必须改变一些东西,但我不知道是什么.

我的目的是将此JSON对象转换为名为.NET对象的列表,Print其中包含以下字段:

PrintId
Header
TX
CompnayRef
Run Code Online (Sandbox Code Playgroud)

Cam*_*amo 27

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

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 = //...
Run Code Online (Sandbox Code Playgroud)


Rac*_*lan 7

正如消息所说,你的对象就是JObject这样,不要把它投射到JArray.试试这个:

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

更新要获取集合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; }
}
Run Code Online (Sandbox Code Playgroud)

这是一个小提琴.

  • 要获取集合 `List&lt;Print&gt;`,您的 JSON 需要是一个数组。检查我的更新。 (2认同)