使用 C# 反序列化一些奇数 JSON

Deserializing Some Odd JSON using C#

我有一份来自供应商的 JSON 文档,如下所示:

{
    "content": [{
        "name": "Windows 8.1 x64",
        "id": "Windows81x64",
        "components": {
            "Windows81x64": {
                "propertyGroups": ["VirtualWindows81x64"],
                "dependsOn": [],
                "data": {
                    "provisioning_workflow": {
                        "fixed": {
                            "id": "WIMImageWorkflow",
                            "label": "WIMImageWorkflow"
                        }
                    },
                    "memory": {
                        "default": 2048,
                        "min": 2048,
                        "max": 16384
                    }
                }
            }
        }
    }]
}

使用典型的 DataContractSerializer 可以很容易地将此​​文档的大部分内容反序列化为 object,但是,有几个 keys/values 我不确定 "best practice"可能。

如果您查看 "components" 键,则该键之后的第一个键标题为 "Windows81x64"。此键可以在文档之间更改,并且可以是任何值。它几乎应该是 collection 的 'Name' 属性,但我无法控制它。此外,在 'Windows81x64' 键内还有另一个 属性,称为 'data'。根据供应商的说法,数据的价值是 'anonymous.' 所以,基本上它可以是任何东西。

当涉及到文档的这些部分时,关于将其反序列化为自定义 object 的最佳方法有什么想法吗?谢谢。

您可以将动态的反序列化为 Dictionary<string, object>

或者,如果您知道值的类型,则可以使用 Dictionary<string, ValueType>,其中字典的键是名称(在您的情况下 Windows81x64