【发布时间】:2017-12-07 12:52:58
【问题描述】:
我正在尝试反序列化 JSON 字符串,其中 JSON 字符串有一个“事件”数组,问题在于当我尝试反序列化字符串时,如下所示,它试图找到“field_name”变量然而,并非数组中的所有对象都以相同的方式构建,只有其中一些具有“field_name”变量。我无法控制相关 API。
基本上我想做什么
dynamic obj = JsonConvert.DeserializeObject(json);
var audits = obj.audits;
List<dynamic> dynamics = JsonConvert.DeserializeObject<List<dynamic>>
(audits.ToString());
List<Event> events = JsonConvert.DeserializeObject<List<Event>>
(dynamics[0].events.ToString());
//The Event class
public class Event
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("value")]
public string Value { get; set; }
[JsonProperty("field_name")]
public string Field_Name { get; set; }
}
我继续收到此异常:
Newtonsoft.Json.JsonReaderException: Error reading string. Unexpected token:
StartArray. Path '[5].value', line 44, position 15.
JSON 数组是这样的:
[{
"id":"id",
"field_name":"field_name",
"something":"something"
},{
"id":"id",
"number":"number",
"something":"something"
},{
"id":"id",
"field_name":"field_name",
"something":"something"
},{
"id":"id",
"name":"name",
"something":"something"
}]
【问题讨论】:
-
对于您正在使用的库,缺失值通常不应该是问题。你能告诉我们第 44 行是什么样子的吗?您的事件模型似乎没有正确反映 JSON 的结构,或者您的 JSON 字符串格式不正确。
-
dynamics[0].events未在您提供的 JSON 中定义。我得到一个 RuntimeBinderException (NULL -Exception)。也许你可以空检查它。或提供一些代码(例如,单元测试),它实际上会重现您的问题。 -
有一次我遇到了这个问题,经过大量搜索并没有找到任何东西,我使用 foreach 创建了我的对象。
-
@MilosMrdovic 行号可以更改,但现在我实际上认为我发现了问题,似乎“值”属性既可以是字符串也可以是数组,最好的做法是处理这种错误?。
-
@codingmonkey 对。我想你会在这里找到答案stackoverflow.com/questions/35978392/… 或这里stackoverflow.com/questions/29688498/…
标签: c# json json.net deserialization