当前位置: 首页 > 面试题库 >

使用Json.Net将JSON解析为数据集时出现问题

牛经赋
2023-03-14
问题内容

我一直在尝试使用json.net(https://dl.dropboxusercontent.com/u/2976553/json)解析json块,但是它未能说明json对象后面有文本。但是,如果您查看它在哪里引发异常

    if (checkAdditionalContent)
    {
      if (reader.Read() && reader.TokenType != JsonToken.Comment )
        throw new JsonSerializationException("Additional text found in JSON string after finishing deserializing object.");
    }

我检查了TokenType,它EndObject似乎不应该生成异常。我也修改了代码以使其忽略EndOjbect,但是它似乎没有解析任何内容。

我正在用这个..

DataSet ds = JsonConvert.DeserializeObject<DataSet>(response);

我已经将json粘贴到许多在线检查器中,他们都将其报告为有效数据。


问题答案:

它不起作用的原因是因为您的JSON数据不符合将其反序列化为DataSet所需的结构。如果您查看文档中的示例,则数据的结构应如下所示:

{
    "table1" : 
    [
        {
            "column1" : "value1",
            "column2" : "value2"
        },
        {
            "column1" : "value3",
            "column2" : "value4"
        }            
    ],
    "table2" : 
    [
        {
            "column1" : "value1",
            "column2" : "value2"
        },
        {
            "column1" : "value3",
            "column2" : "value4"
        }            
    ]
}

换句话说,外部对象包含代表表的属性。属性名称对应于表的名称,并且值是对象的所有数组,其中每个对象代表表中的一行。对象的属性与列名相对应,其值是行数据。行数据值必须是简单类型,例如字符串,整数,布尔值等。(如果使用Json.Net
6.0或更高版本,则还支持简单类型数组和嵌套数据表。)

您的JSON数据要比这复杂得多,并且深度嵌套。除非您编写自己的自定义JsonConverter来做,否则您将无法使Json.Net将其反序列化为DataSet。而且我认为这样做是不值得的。

相反,我将考虑以下其他替代方法之一:

  1. 创建一个强类型的类层次结构并将其反序列化。您可以使用json2csharp.com来帮助您生成类。(但是请注意,json2csharp并非万无一失-有时您需要编辑它生成的类才能使事情正常工作。)
  2. 反序列化为,JObject并使用Json.Net的LINQ-to-JSON API导航和提取所需的数据。这是一个可能对此有所帮助的示例。文档以及StackOverflow上还有许多其他示例。
  3. 反序列化为dynamic。假设您非常了解数据的结构,这种方法可以很容易地获取数据,但是却失去了智能感知和编译时检查。


 类似资料:
  • 问题内容: 我正在与Json.Net解析数组。我正在尝试做的是将名称/值对从数组中拉出,并在解析JObject时将它们分配给特定的变量。 这是数组中的内容: 这是我在C#中获得的东西: 我是JSON和Json.Net的新手,因此它可能是其他人的基本解决方案。我基本上只需要在foreach循环中分配名称/值对,以便可以在前端输出数据。有人做过吗? 问题答案: 您可以这样获得数据值: 小提琴:http

  • 问题内容: 我是使用AngularJS的新手,但在解析json响应时遇到问题。这是我正在使用的HTML代码: 这是使用AngularJS的Javascript代码: HTML使用服务器返回的JSON显示变量$ scope.response,但顶部列表中未显示任何内容。JSON的格式完美,但是$ scope.cars变量似乎始终为空。 我究竟做错了什么? 非常感谢, GA 问题答案: $ http.

  • 问题内容: 我正在用Python阅读JSON文件,其中包含许多字段和值(约8000条记录)。Env:Windows 10,Python 3.6.4;码: 这样我得到一个错误。下面是堆栈跟踪: 伴随着我,我尝试了 与此相关,我的程序运行了很长时间,然后挂起,没有任何输出。 我搜索了几乎与此相关的所有主题,但找不到解决方案。 注意:JSON数据是有效的,因为当我在Postman /任何REST客户端上

  • 问题内容: 我在C#中有一个类似以下的字符串。我需要遍历并创建HTML表输出。我尝试使用JSON.NET,但无法弄清楚如何检索键(名称,年龄和工作)。 表格格式为 任何帮助将不胜感激。 Dave提供的代码在这里是理想的解决方案..但是它适用于.NET 4.0 ..我已经将JSON.NET和以下代码用于.NET 3.5 使用Newtonsoft.Json.Linq; 问题答案: 您可以使用.NET

  • 问题内容: 我有一个.NET项目。我正在使用JSON.NET库。我需要使用该库来解析一些JSON。我的JSON看起来像这样: 该对象实际上只是键/值对的列表。我试图弄清楚如何使用JSON.NET来1)解析此JSON和2)通过键/值对进行循环。有没有办法做到这一点?如果是这样,怎么办? 我唯一看到的是将反序列化为强类型的对象。 非常感谢! 问题答案: 您可以反序列化为 由于JObject实现,因此您

  • 类: JSON数据: {“列表”:[{“类型”:0,“文本”:“文本1”},{“类型”:1,“问题”:“文本2”}]} 类来保存列表项: 一切顺利,我为JSON字符串中的type和text获得了正确的值。但逮捕仍为空。