首页 > 解决方案 > 不一致的 JSON

问题描述

我试图在 C# 中解析不一致的 JSON,即下面是我得到的 JSON 示例。

    {
    "Timestamp" : "2019-05-09T11:24:25.000Z",
    "Channel" : "web",
    "Supplier" : "kunde",
    "Generator" : "survey",
    "Type" : "hudtest",
    "Data" :{
        "Alder" : "20-29",
        "Køn" : "Kvinde",
        "Hudtype" : "sensitiv",
        "Hudtilstand" : "mixet"
       }
}

这个 JSON 的变体是这样的:

    {
    "Timestamp" : "2019-05-09T11:24:25.000Z",
    "Channel" : "web",
    "Supplier" : "kunde",
    "Generator" : "survey",
    "Type" : "hudtest",
    "Data" :{
        "Alder" : "20-29",
        "Køn" : "Kvinde",
        "Hudtype" : "sensitiv",
        "Hudtilstand" : "mixet",
        "materialistID" : 61234,
        "Anbefalede produkter" : [ 100225, 725125 ]
    }
}

正如您在两个示例中看到的那样,我的Data键值不同。如何在 C# 中解析这个 JSON?

仅供参考:Data密钥可以具有与我上面分享的示例不同的值。不仅"Anbefalede produkter。它可以包含许多不同的值。我也尝试过制作dynamic或解析为anonymous类型。但我也想验证我的 JSON 模式,除了DataKey 必须验证其他键并且它们是强制性的。

标签: c#json

解决方案


你可以这样做

      class Program
    {
        static void Main(string[] args)
        {

            string jsonData = @"{  'Timestamp': '2019-05-09T11:24:25.000Z',
    'Channel': 'web',
    'Supplier': 'kunde',
    'Generator': 'survey',
    'Type': 'hudtest',
    'Data': {
        'Alder': '20-29',
        'Køn': 'Kvinde',
        'Hudtype': 'sensitiv',
        'Hudtilstand': 'mixet',
        'materialistID': 61234,
        'Anbefalede produkter': [100225, 725125]
    }
}";

            var b = JsonConvert.DeserializeObject<Rootobject>(jsonData);

            //Console.WriteLine(b.Data.Hudtype);
            //or
            Console.WriteLine(b.Data["Hudtype"]);

            Console.ReadKey();

        }

    }

    public class Rootobject
    {
        public DateTime Timestamp { get; set; }
        public string Channel { get; set; }
        public string Supplier { get; set; }
        public string Generator { get; set; }
        public string Type { get; set; }
        public Dictionary<string, object> Data { get; set; }
    }

希望这能解决您的问题。谢谢


推荐阅读