【发布时间】:2018-12-15 12:07:42
【问题描述】:
(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 H结果=0x80131500 消息 = 读取 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 阅读器,DataTable dt,JsonSerializer 序列化程序) 在 Newtonsoft.Json.Converters.DataTableConverter.ReadJson(JsonReader 阅读器,类型 objectType,Object existingValue,JsonSerializer 序列化程序) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter 转换器,JsonReader 阅读器,类型 objectType,对象现有值) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader 阅读器,类型 objectType,布尔 checkAdditionalContent) 在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader 阅读器,类型 objectType) 在 Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型类型,JsonSerializerSettings 设置) 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值,JsonSerializerSettings 设置) 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值)
更新 1:@D-Shih 我在 col3 之后删除了多余的逗号以使“Json Parser”满意,但是我仍然得到相同的异常。请注意,我在test1 上没有收到任何错误,但在test2 上确实收到了错误。
【问题讨论】:
标签: c# json json.net deserialization json-deserialization