完整错误
无法反序列化当前的JSON对象(例如{“name”:“value”}) 进入类型'System.Collections.Generic.List`1 [System.String]'因为 该类型需要一个JSON数组(例如[1,2,3])来反序列化 正确。要修复此错误,请将JSON更改为JSON数组 (例如[1,2,3])或更改反序列化类型以使其正常 .NET类型(例如,不是整数的基本类型,不是集合 类似于数组或List的类型,可以从JSON反序列化 宾语。 JsonObjectAttribute也可以添加到类型中以强制它 从JSON对象反序列化。路径 'CEC1B0C9-A87A-4A9E-A017-AEFC3CEDCBD4',第2行,第42位。
在这段代码之前,有一个运行良好的代码......
var highlighting = JsonConvert.DeserializeObject<Object>(jsonDeserialized["highlighting"].ToString());
这为我们提供了搜索引擎的一些数据:
{\r\n "C6C1B0C9-A87A-4A9E-A017-AEFC3CEDCBD4": {\r\n "Title_fr":
[\r\n "<em>Chris</em> <em>Cep</em>"\r\n ]\r\n } ,\r\n
"874BE5B1-FAA0-463F-98DD-8532D4D80178": {\r\n "Content_fr": [\r\n
" <em>Chris</em> <em>Cep</em>, Ctifl \n\n9 Info - Tgif /
January - February 2001\n\nThe Tgif on the Net\nInquire"\r\n
]\r\n } ,\r\n "44FA5B99-9472-499C-9827-646A511068DA": {\r\n
"Content_fr": [\r\n " S\n\nHorti\nThe
database\ndocument\n<em>Chris</em> <em>Cep</em>, Iso
Rever,\nJeane Samuel"\r\n ]\r\n } \r\n}
//formatted - http://jsonblob.com/53d24a78e4b0ed12c5a6b1df
{
"C6C1B0C9-A87A-4A9E-A017-AEFC3CEDCBD4": {
"Title_fr": [
"<em>Chris</em> <em>Cep</em>"
]
},
"874BE5B1-FAA0-463F-98DD-8532D4D80178": {
"Content_fr": [
" <em>Chris</em> <em>Cep</em>, Ctifl \n\n9 Info - Tgif / January - February 2001\n\nThe Tgif on the Net\nInquire"
]
},
"44FA5B99-9472-499C-9827-646A511068DA": {
"Content_fr": [
" S\n\nHorti\nThe database\ndocument\n<em>Chris</em> <em>Cep</em>, Iso Rever,\nJeane Samuel"
]
}
}
我认为,问题在于下面的三个对象都是“命名”不同的。即我不能JsonConvert.DeserializeObject<List<string>>(jsonDeserialized["highlighting"]["CAN'T-REFERENCE-ANYTHING-HERE"].ToString())
,因为这些节点的名称是C6C1B0C9-A87A-4A9E-A017-AEFC3CEDCBD4
之类的GUID。
我还是比较绿色的JSON - 我在这里缺少什么?如何将“突出显示”中的三个对象放入List&lt;&gt;某种程度?
我的解决方案:
private class Highlighters //defined elsewhere
{
public string IdGlobal;
public string FieldName;
public string FieldValue;
}
var highlighters = new List<Highlighters>();
var allHighlights = JsonConvert.DeserializeObject<IDictionary<string, object>>(jsonDeserialized["highlighting"].ToString());
foreach (var entry in allHighlights)
{
string guid = entry.Key;
string j = entry.Value.ToString();
var insideEntry = JsonConvert.DeserializeObject<IDictionary<string, object>>(j);
foreach (var h in insideEntry)
{
string highlightedField = h.Key;
string highlightedValue = h.Value.ToString().Substring(1, h.Value.ToString().LastIndexOf("]") - 1).Trim().Trim('"').Trim();//a little cleaning
highlighters.Add(new Highlighters{IdGlobal=guid, FieldName = highlightedField, FieldValue = highlightedValue});
}
}
答案 0 :(得分:1)
如果您对密钥(在您的示例中是GUID)不感兴趣,请将JSON反序列化为Dictionary<string, JObject>
并访问生成的字典的.Values
。