使用Json.Net将JSON解析为DataSet的问题
我一直在尝试使用json.net( https://dl.dropboxusercontent.com/u/2976553/json )解析json块,但它失败说明json对象后面有文本。 但是,如果你看看它抛出exception的位置
if (checkAdditionalContent) { if (reader.Read() && reader.TokenType != JsonToken.Comment ) throw new JsonSerializationException("Additional text found in JSON string after finishing deserializing object."); }
我检查了TokenType,它是一个看起来不像应该生成exception的EndObject
。 我修改了代码以忽略EndOjbect
,但它似乎没有解析任何东西。
我正在使用这个..
DataSet ds = JsonConvert.DeserializeObject(response);
我已将json粘贴到许多在线检查器中,并且它们都将其报告为有效数据。
它不起作用的原因是因为您的JSON数据不符合将反序列化为DataSet所需的结构。 如果你看一下文档中的例子 ,数据需要像这样构建:
{ "table1" : [ { "column1" : "value1", "column2" : "value2" }, { "column1" : "value3", "column2" : "value4" } ], "table2" : [ { "column1" : "value1", "column2" : "value2" }, { "column1" : "value3", "column2" : "value4" } ] }
换句话说,外部对象包含表示表的属性。 属性名称对应于表的名称,值是所有对象的数组,其中每个对象表示表中的一行。 对象的属性对应于列名称,它们的值是行数据。 行数据值必须是简单类型,如string,int,bool等。(如果您使用的是Json.Net 6.0或更高版本,也支持简单类型和嵌套数据表的数组。)
您的JSON数据比这更复杂,并且是深层嵌套的。 您将无法让Json.Net将其反序列化为DataSet,除非您编写自己的自定义JsonConverter来执行此操作。 而且我认为这样做并不值得。
相反,我会考虑其中一个替代方案:
上述就是C#学习教程:使用Json.Net将JSON解析为DataSet的问题分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
- 创建一个强类型的类层次结构并反序列化。 您可以使用json2csharp.com来帮助生成类。 (但是,请注意,json2csharp并非万无一失 – 有时您需要编辑它生成的类以使事情正常工作。)
- 反序列化为
JObject
并使用Json.Net的LINQ-to-JSON API来导航和提取所需的数据。 这是一个可能有助于此的示例 。 文档中还有许多其他示例以及StackOverflow上的示例。 - 反序列化为
dynamic
。 这种方法可以很容易地获取您的数据,假设您已经很好地了解了它的结构,但是您失去了智能感知和编译时检查。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1006873.html