在C#dotnet core 2.2中反序列化特定的json对象

时间:2019-02-25 20:22:30

标签: c# .net json json.net core

我正在尝试在C#dotnet core 2.2应用程序中序列化我认为是不寻常的json结构。

{
    "id": "002a40a1-2e31-4663-a8d0-a4e6e2742d62",
    "data": [
        1,
        [
            "value",
            false
        ]
    ]
}

尝试在c#中对数据属性建模时,我感到困惑

public class DataItem {
    [JsonProperty("id")]
    string id;

    [JsonProperty("data")]
    public object[] data;
}

我不知道如何在c#中正确建模此结构以允许Newtonsoft反序列化。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您在运行时不知道数据是什么,则必须使用JsonExtensionDataAttribute

因此它将把您的“数据”抽象成JToken的字典

public class DataItem {
    [JsonProperty("id")]
    string id;

    [JsonProperty("data")]
    [JsonExtensionData]
    public IDictionary<string, JToken> data;
}

您可以在此处查看更多详细信息:https://www.jerriepelser.com/blog/using-jsonextensiondata-with-jsonnet/https://www.newtonsoft.com/json/help/html/SerializationAttributes.htm

答案 1 :(得分:0)

由于它没有结构化格式,因此建议您使用dynamic。或者,如果您使用object[],则可以手动遍历每个对象并检查条件内的对象类型。

或者,您可以使用IDictionary<string, JToken>

public class DataItem {
    [JsonProperty("id")]
    string id;

    [JsonProperty("data")]
    public Dictionary<string, JToken> data;
}