无法将Json文件反序列化为带有字符串“ key”的KeyValuePair列表

时间:2019-08-23 14:07:11

标签: c# json json.net

我很难反序列化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”})才能正确反序列化。

1 个答案:

答案 0 :(得分:0)

如上面的评论中所述,解决方案是使用字典列表。 (不仅是字典,也不是KeyValuePair列表)

List<Dictionary<string, SpellCheckSuggestion>>