c# - 如何将内容不同但结构相同的 JSON 字符串转换为 C# 对象?
问题描述
我有一个 Xamarin Forms 项目。在这个项目的一部分中,我需要以 JSON 字符串的形式从数据库中检索数据,但是这些数据可能会在根、值和根名称的数量上发生变化。然而,所有检索到的字符串都具有相同的结构,字符串中的所有信息都是不同的。
一个示例字符串:(原来它是一行。)
{
"20Pr": {
"20Pr": {
"AA": "0:0:0",
"EE": "1:0:4",
"Comp": 0,
"ASE": "0:0:0",
"PES": "1:0:0",
"PLD": "0:0:4",
"ASET": "0:0:0"
},
"22Bp Cache": {
"AA": "0:0:0",
"EE": "1:0:1",
"Comp": 0,
"ASE": "-",
"PES": "1:0:0",
"PLD": "0:0:1",
"ASET": "-"
},
"21SSL Fail": {
"AA": "0:0:0",
"EE": "1:0:1",
"Comp": 0,
"ASE": "-",
"PES": "1:0:0",
"PLD": "0:0:1",
"ASET": "-"
}
},
"40godown": {
"43Sw & DB": {
"AA": "0:0:0",
"EE": "1:24",
"Comp": 0,
"ASE": "-",
"PES": "1:1:4",
"PLD": "0:0:1:0",
"ASET": "-"
},
"40goown": {
"AA": "0:0:0",
"EE": "1:24",
"Comp": 0,
"ASE": "0:0:0",
"PES": "1:0:4",
"PLD": "0:2:0",
"ASET": "0:0:0"
}
}
}
只有 AA,EE,Comp,ASE,PES,PLD,ASET 是恒定的,但它们的值不是恒定的。
是否可以通过更改 JSON 字符串来创建 C# 对象,而无需将名称信息设为“40godown”?
解决方案
假设您已经定义了一个Thing
具有AA
, EE
,...,ASET
属性的类,您可以将该 JSON 反序列化为Dictionary<string, Dictionary<string, Thing>>
而不会丢失信息。
var data = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, Thing>>>(json);
推荐阅读
- javascript - 在 vscode 调试器中查看导入的变量时遇到问题 - Javascript 和反应
- javascript - Discord js v13频道过滤器不起作用
- python - highcharts 不是 Ipython 中的函数
- reactjs - 在 GET 请求开始之前等待 POST 请求完成(React/Node)
- r - R中,一个关于正则表达式的问题 -stringr package (str_remove_all)
- sql - 使用 AbstractCube.sql() 在扩展多维数据集中未定义的安全上下文。CubeJS
- .net - 尝试将 Microsoft 的身份验证数据库作为 Azure SQL 访问时出现 .NET Core 错误
- jquery - $(...).fancyTable 不是函数
- python-3.x - 如何使用闭包来装饰带有标题的数据?
- python-3.x - 在 django 中使用简单 JWT 时无法验证电子邮件