首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法将“Newtonsoft.Json.Linq.JObject”类型的对象强制转换为“Newtonsoft.Json.Linq.JArray”类型

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

Stack Overflow用户
提问于 2015-11-03 09:33:48
回答 4查看 153.5K关注 0票数 29

我正在测试我的Web。模拟我拥有的数据如下:

代码语言:javascript
复制
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列表,其中包含以下字段:

代码语言:javascript
复制
PrintId
Header
TX
CompnayRef
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-03 09:45:54

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

代码语言:javascript
复制
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 = //...
票数 44
EN

Stack Overflow用户

发布于 2015-11-03 09:38:34

正如消息所述,您的对象是JObject,所以不要将其转换为JArray。试试这个:

代码语言:javascript
复制
var objs = JsonConvert.DeserializeObject("{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}");

更新以获得一个集合List<Print>,您的JSON需要一个数组。尝试这样做(我使您的JSON成为一个数组并添加了第二个对象):

代码语言:javascript
复制
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; }
}

这是一个小提琴

票数 10
EN

Stack Overflow用户

发布于 2019-07-23 10:06:58

对我来说,我把空字符串作为引发问题的对象,我切换到了"{}“,它解决了我的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33495634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档