我很难反序列化Solr搜索引擎的json响应。
我使用Newtonsoft Json.NET。
Solr的简化响应:
{
"suggestions": [
{
"someword": {
"numFound": 1
}
}
]
}
我将其反序列化为KeyValuePair<string, customobject>
的列表。
customobject test = Newtonsoft.Json.JsonConvert.DeserializeObject<customobject>(jsonText);
工作正常,直到用户键入单词“ key”,Solr才返回该JSON:
{
"suggestions": [
{
"key": {
"numFound": 1
}
}
]
}
此JSON的反序列化会引发此错误:
解析值时遇到意外字符
... 好。我只是意识到,即使它不会引发“ key”以外的其他单词的异常,也不会起作用,因为输出对象中的KeyValuePair始终为空。
我以前从未意识到此问题,因为从未使用过Json(拼写检查建议)这一部分。
如此简单的解决方法:我们不再将建议序列化。
但是,如果仍然有人要回答这个问题,您将以哪种对象反序列化此Json(来自Solr)?
{
"suggestions":
[
{"brack":{
"numFound":10,
"startOffset":0,
"endOffset":5,
"origFreq":0,
"suggestion":[{
"word":"back",
"freq":78},
{
"word":"black",
"freq":1}
]}},
{"key":{
"numFound":1,
"startOffset":6,
"endOffset":9,
"origFreq":12,
"suggestion":[{
"word":"key",
"freq":15}]}}]
}
我认为字典无法胜任:
Newtonsoft.Json.JsonSerializationException:'无法将当前JSON数组(例如[1,2,3])反序列化为类型'System.Collections.Generic.Dictionary`2 [System.String,Test.SpellCheckSuggestion]',因为类型需要JSON对象(例如{“ name”:“ value”})才能正确反序列化。
答案 0 :(得分:0)
如上面的评论中所述,解决方案是使用字典列表。 (不仅是字典,也不是KeyValuePair列表)
List<Dictionary<string, SpellCheckSuggestion>>