(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:EndArray时出现意外的JSON令牌。路径'[0] .col2',第4行,位置12。 资料来源= Newtonsoft.Json 堆栈跟踪: 在Newtonsoft.Json.Converters.DataTableConverter.GetColumnDataType(JsonReader阅读器) 在Newtonsoft.Json.Converters.DataTableConverter.GetColumnDataType(JsonReader阅读器) 在Newtonsoft.Json.Converters.DataTableConverter.CreateRow(JsonReader reader,DataTable dt,JsonSerializer序列化器)处 在Newtonsoft.Json.Converters.DataTableConverter.ReadJson(JsonReader阅读器,类型objectType,对象existValue,JsonSerializer序列化器)处 在Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter转换器,JsonReader阅读器,类型objectType,对象existingValue)中 在Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Type objectType,Boolean checkAdditionalContent)中 在Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader,Type objectType) 在Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型,JsonSerializerSettings设置) 在Newtonsoft.Json.JsonConvert.DeserializeObject [T](字符串值,JsonSerializerSettings设置) 在Newtonsoft.Json.JsonConvert.DeserializeObject [T](String value)
更新1:@ D-Shih我在col3之后删除了多余的逗号,以使“ Json Parser”满意,但是,我仍然得到同样的异常。请注意,我在test1
上没有收到任何错误,但在test2
上却得到了错误。
答案 0 :(得分:0)
测试JSON数据中的错误。删除col3
""col3"": ""b2c172ea-e48c-4e20-9bee-3470278bd801""
代替
""col3"": ""b2c172ea-e48c-4e20-9bee-3470278bd801"",
我建议网站可以轻松检查JSON格式
编辑
我看到了Json.net
源代码
如果您想将JsonConvert.DeserializeObject
设置为DataTable
,则不能提供。空的array
关于源代码
private static void CreateRow(JsonReader reader, DataTable dt)
如果没有提供类型Type columnType = GetColumnDataType(reader);
不能判断此数组的类型,则有一部分代码Json.net
用于获取json colunm类型。
因此您可以将数组作为空字符串提供。
看起来像这样。
var jsonString2 = @"[
{
""col1"": ""bd3013bb-39a3-4704-b7c9-803c220f8abe"",
""col2"": [""""],
""col3"": ""b2c172ea-e48c-4e20-9bee-3470278bd801""
}]";
c#在线:https://dotnetfiddle.net/M6A3vE
EDIT1
这是个问题,我向JSON.Net
报告,它将在将来的版本中修复