首页 > 解决方案 > 反序列化没有字段名的 JSON

问题描述

我有以下 JSON。当我反序列化它responseHeader并且response工作正常但highlighting没有。

问题是突出显示数据如下所示,为_text_空。我想将两个值都存储在两个字段中。问题是第一部分没有任何常量字段名称。

1. C:\\TestArea..........
2. _text_

  "highlighting":{ 
        "C:\\TestArea\\Destination\\SUP000011\\ATM-1B4L2KQ0ZE0-0001\\SoS_Update_2018_06_04_pram.pptx":{
          "_text_":["\nSCRUM of SCRUMs S4-W1 \n AXP Internal \n 4-<em>Jun</em>-18 \n \n slide-master-content   \n \n  \n slide-notes   \n 4-<em>Jun</em>"]},

JSON:

{
    "responseHeader": {
        "status": 0,
        "QTime": 115,
        "params": {
            "q": "\"John\"",
            "hl": "on",
            "hl.simple.post": "</em>",
            "start": "0",
            "rows": "10000",
            "hl.simple.pre": "<em>"
        }
    },
    "response": {
        "numFound": 10,
        "start": 0,
        "docs": [{
            "domain": ["FIU/FCRU"],
            "id": "C:\\TestArea\\Destination\\SUP000011\\ATM-1B4L2KQ0ZE0-0001\\SoS_Update_2018_06_04_pram.pptx"

        }]
    },
    "highlighting": {
        "C:\\TestArea\\Destination\\SUP000011\\ATM-1B4L2KQ0ZE0-0001\\SoS_Update_2018_06_04_pram.pptx": {
            "_text_": ["\nSCRUM of SCRUMs S4-W1 \n AXP Internal \n 4-<em>Jun</em>-18 \n \n slide-master-content   \n \n  \n slide-notes   \n 4-<em>Jun</em>"]
        },
        "C:\\TestArea\\Destination\\SUP000005\\F-3-20150505-0028\\tt.csv": {
            "_text_": [",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL\r\n930,<em>John</em> Ferguson,NULL,2015-06-30 15:27:04.677,test.test"]

        }
    }
}

我的数据模型和代码:

public class RootObject
{
    public ResponseHeader responseHeader { get; set; }
    public Response response { get; set; }
    public Highlighting highlighting { get; set; }
} 
public class Highlighting
{   
    public List<string> _text_ { get; set; }
}

var outObject = JsonConvert.DeserializeObject<RootObject>(jsonString, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto });

标签: c#json.net

解决方案


对于该highlighting属性,请Dictionary<string, Highlighting>像这样使用:

public class RootObject
{
    public ResponseHeader responseHeader { get; set; }
    public Response response { get; set; }
    public Dictionary<string, Highlighting> highlighting { get; set; }
} 

public class Highlighting
{   
    public List<string> _text_ { get; set; }
}

为什么这行得通?"highlighting"如果我像这样简化值:

"highlighting": {
   "File Name 1":{ "_text_":[ "text 1" ] },
   "File name 2":{ "_text_":[ "text 2" ] }
}

我们可以看到它是一个带有可变属性名称的 JSON 对象,它们的值具有固定的模式。Json.NET 支持将其序列化到字典和从字典中序列化;有关详细信息,请参阅反序列化字典

样品小提琴在这里


推荐阅读