强制将Json属性合并到列表/数组

时间:2018-08-23 15:02:54

标签: c# json json.net

我有一个具有以下结构的JsonFile(对德语名称表示抱歉):

"400161": {
"feuerwehrnummer": "someRandomIntagere",
"feuerwehrname": "someCharacters",
"feuerwehrkommandant": {
  "name": "someonesName",
  "dienstgrade": {
    "0": "aa",
    "1": "bb",
    "2": "cc"
  },
  "foto": "fotoPath"
}
"fahrzeuge": {
  "0": {
    "klasse3typ": "L\u00f6schfahrzeuge (B1)",
    "kurzbezeichnung": "LF",
    "name": "PUMPE 2",
    "funkrufname": "PUMPE 2"
  },
  "1": {
    "klasse3typ": "L\u00f6schfahrzeuge (B1)",
    "kurzbezeichnung": "LF",
    "name": "PUMPE 1",
    "funkrufname": "PUMPE 1"
  },
}},

我尝试使用JToken.ToObject-Function解析它,其中T是此对象:

    public int feuerwehrnummer { get; set; }
    public string feuerwehrname { get; set; }
    public string bezirk { get; set; }
    public string abschnitt { get; set; }
    public string gemeinde { get; set; }
    public firefighterPerson feuerwehrkommandant { get; set; }
    public firefighterPerson abschnittskommdandant { get; set; }
    public firefighterPerson bezirkskommandant { get; set; }
    public firefighterPerson landeskommandant { get; set; }
    public int anzahlfeuerwehren_gemeinde { get; set; }
    public int anzahlfeuerwehren_ff_bezirk { get; set; }
    public int anzahlfeuerwehren_btf_bezirk { get; set; }
    public int anzahlfeuerwehren_bf_bezirk { get; set; }
    public List<fireVehicle> fahrzeuge { get; set; }
    public fotoObject foto { get; set; }

我的问题发生在其后代“ dienstgrade”的一个名为“ feuerwehrkommandant”的属性中,因为我试图将其所有后代合并到一个列表中,如下所示:

    class firefighterPerson
{
    public string name { get; set; }

    public List<string> dienstgrade{ get; set; }

    public string foto { get; set; }
}

运行程序时,出现以下错误消息:

  

不是可以从JSON对象反序列化的原始类型(如整数),也不是集合类型(如数组或List)。还可以将JsonObjectAttribute添加到类型中,以强制其从JSON对象反序列化。   路径“ 400161.feuerwehrkommandant.dienstgrade.0”。

(它当然也出现在令牌“ fahrzeuge”处)

我完全理解消息,但是由于我从中获取数据的api不使用JsonArray,但是具有动态名称(“ 1”,“ 2”,...)的Properties我没有找到这种工作方式。有什么办法告诉反序列化器将属性合并到列表中,还是必须手动编写反序列化?

1 个答案:

答案 0 :(得分:0)

Dictionary<string, string> dienstgrade { get; set; }