c# - 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"]
}]
}
解决方案
您不必立即使用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];
}
}
推荐阅读
- python - 尝试遵循这个交互式小部件教程
- scipy - scipy.optimize 中的约束抛出 x0 错误
- c# - gridview 同一单元格上的多个链接按钮 - 单击事件未触发 - c#
- c++ - CMAKE 检测编译器 ABI 失败
- matlab - 如何在转换数据类型之前重新缩放图像数据
- python - AttributeError:模块'scipy'没有属性'__version__'
- jboss - 部署到 Wildfly 期间出现问题,错误“名称为空”
- android - 是否有适用于 iOS 的 FastOutSlowInInterpolator 等价物?
- android - Vimeo Player 是以字节还是 mb 为单位返回视频大小?
- node.js - 如何使用 node.js 和 web 套接字在终端上显示客户端的数据