首页 > 解决方案 > 如何将内容不同但结构相同的 JSON 字符串转换为 C# 对象?

问题描述

我有一个 Xamarin Forms 项目。在这个项目的一部分中,我需要以 JSON 字符串的形式从数据库中检索数据,但是这些数据可能会在根、值和根名称的数量上发生变化。然而,所有检索到的字符串都具有相同的结构,字符串中的所有信息都是不同的。

一个示例字符串:(原来它是一行。)

{
    "20Pr": {
        "20Pr": {
            "AA": "0:0:0",
            "EE": "1:0:4",
            "Comp": 0,
            "ASE": "0:0:0",
            "PES": "1:0:0",
            "PLD": "0:0:4",
            "ASET": "0:0:0"
        },
        "22Bp Cache": {
            "AA": "0:0:0",
            "EE": "1:0:1",
            "Comp": 0,
            "ASE": "-",
            "PES": "1:0:0",
            "PLD": "0:0:1",
            "ASET": "-"
        },
        "21SSL Fail": {
            "AA": "0:0:0",
            "EE": "1:0:1",
            "Comp": 0,
            "ASE": "-",
            "PES": "1:0:0",
            "PLD": "0:0:1",
            "ASET": "-"
        }
    },
    "40godown": {
        "43Sw & DB": {
            "AA": "0:0:0",
            "EE": "1:24",
            "Comp": 0,
            "ASE": "-",
            "PES": "1:1:4",
            "PLD": "0:0:1:0",
            "ASET": "-"
        },
        "40goown": {
            "AA": "0:0:0",
            "EE": "1:24",
            "Comp": 0,
            "ASE": "0:0:0",
            "PES": "1:0:4",
            "PLD": "0:2:0",
            "ASET": "0:0:0"
        }
    }
}

只有 AA,EE,Comp,ASE,PES,PLD,ASET 是恒定的,但它们的值不是恒定的。

是否可以通过更改 JSON 字符串来创建 C# 对象,而无需将名称信息设为“40godown”?

标签: c#jsonxamarinxamarin.forms

解决方案


假设您已经定义了一个Thing具有AA, EE,...,ASET属性的类,您可以将该 JSON 反序列化为Dictionary<string, Dictionary<string, Thing>>而不会丢失信息。

var data = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, Thing>>>(json);

推荐阅读