首页 > 解决方案 > json 到 C# 对象

问题描述

我从外部系统收到一个 JSON 字符串,我想转入 C# 对象。问题是“CAR”对象在字符串中是唯一的,我不知道有多少(0 ​​到多个)。

现在,为每个“CAR”硬编码类是没有意义的,比如类:CAR1、类:CAR2 等等。我试图创建一个通用的 CAR 类,并认为我可以遍历 JSON 并创建 CAR 对象。

问题是我无法动态识别和查找每个 CAR。我通过硬编码“CAR1”找到“CAR1”的属性和值。我想找到一个解决方案,例如:

foreach(item.key where key starts with "CAR")

尝试了以下方法:

var expConverter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(jsondata, expConverter);
dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsondata);
            foreach (var itm in obj)
            {
               string s = itm.Key;
               if(s.StartsWith("CAR"))
                {
                   CarObj = new Car();
                   CarObj.HP = json.CAR1[0].HORSEPOWER[0];
                   CarObj.COLOR = json.CAR1[0].COLOR[0];
                  // Would like to use something like
                  //  CarObj.HP = json.**item.key**[0].HORSEPOWER[0];

                }
            }

{
    "CAR1": [{
        "HORSEPOWER": ["180", "int", "Hp"],
        "COLOR": ["GREEN", "string", "COLOR"]
    }],
    "CAR2": [{
        "HORSEPOWER": ["200", "int", "Hp"],
        "COLOR": ["BlUE", "string", "COLOR"]
    }]
}

标签: c#json

解决方案


您不必立即使用dynamic。首先使用强类型 API 找到 JSON 的正确部分,然后切换到动态:

var obj = JObject.Parse(json);

foreach (var element in obj)
{
    if (element.Key.StartsWith("CAR"))
    {
        dynamic value = element.Value;

        var carObj = new Car();
        carObj.HP = value[0].HORSEPOWER[0];
    }
}

推荐阅读