(Json.NET) JsonConvert.DeserializeObject<DataTable>()
与填充的数组一起使用,但不使用空数组( [],
,如我的例子所示:jsonString2→col2) . 我希望它默认创建一个string []列,或跳过,或以其他方式避免异常 .
截图:
代码(更新1:在col3之后删除额外的逗号并仍然获得异常 . ):
[TestMethod]
public void TestSerializeEmptyArray()
{
var jsonString1 = @"[
{
""col1"": ""bd3013bb-39a3-4704-b7c9-803c220f8abe"",
""col2"": [
""57ae6e0e-0c20-4da5-a246-b949c71ef551"",
""2bafe349-4b29-4161-814a-5a369459b78c""
],
""col3"": ""b2c172ea-e48c-4e20-9bee-3470278bd801""
}]";
var test1 = JsonConvert.DeserializeObject<DataTable>(jsonString1);
var jsonString2 = @"[
{
""col1"": ""bd3013bb-39a3-4704-b7c9-803c220f8abe"",
""col2"": [],
""col3"": ""b2c172ea-e48c-4e20-9bee-3470278bd801""
}]";
var test2 = JsonConvert.DeserializeObject<DataTable>(jsonString2);
}
例外:
Newtonsoft.Json.JsonSerializationException HResult = 0x80131500 Message =读取DataTable时出现意外的JSON令牌:EndArray . 路径 '[0] .col2',第4行,位置12源= Newtonsoft.Json堆栈跟踪:在Newtonsoft.Json.Converters.DataTableConverter.GetColumnDataType(JsonReader阅读器)在Newtonsoft.Json.Converters.DataTableConverter.GetColumnDataType(JsonReader读取器)在Newtonsoft.Json.Converters.DataTableConverter.CreateRow(JsonReader阅读器,数据表DT,JsonSerializer串行器)在Newtonsoft.Json.Converters.DataTableConverter.ReadJson(JsonReader读卡器,类型的objectType,对象existingValue,JsonSerializer串行器)在Newtonsoft.Json.Serialization . Newtonoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Type objectType,Boolean checkAdditionalContent)中的JsonSerializerInternalReader.DeserializeConvertable(JsonConverter转换器,JsonReader reader,Type objectType,Object existingValue),位于Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader,Type objectType) )at Newtonsoft.Json.JsonConvert.DeserializeObject(String value,Type type,JsonSerializerSetti) NGS设置)在Newtonsoft.Json.JsonConvert.DeserializeObject [T](字符串值,JsonSerializerSettings设置)在Newtonsoft.Json.JsonConvert.DeserializeObject [T](字符串值)
更新1:@ D-Shih我删除了col3之后的额外逗号以使"Json Parser"高兴但是,我仍然得到完全相同的异常 . 请注意,我在 test1
上没有收到任何错误,但我确实在 test2
上收到错误 .
1 回答
测试JSON数据的错误 . 在
col3
之后删除逗号代替
我建议一个网站可以轻松检查JSON格式
Json Parser
EDIT
我看到了
Json.net
源代码如果你想
JsonConvert.DeserializeObject
为DataTable
,你不能给它 . 空array
在源代码上
有一部分代码
Type columnType = GetColumnDataType(reader);
来获取json colunm类型,如果没有提供类型Json.net
则无法判断此数组的类型 .因此,您可以将数组作为空字符串 .
看起来像这样 .
c#online:https://dotnetfiddle.net/M6A3vE
EDIT1
这是一个问题,我向
JSON.Net
报告它将在未来版本中修复Fix error when deserializing empty array in DataTable