c# - 反序列化嵌套 JSON,映射到模型并保存
问题描述
我的初始版本能够获取一段 JSON,将“键值”对映射到一个对象并相应地将其存储到数据库中,例如:
{
"msee": 11976.16796875,
"r2": -0.8027065992355347,
"std": 109.59520721435547,
"avg": -2.3448710441589355,
"min": -386.17926025390625,
"max": 405.26837158203125,
"out_file": "test.png"
}
然后我上课了ResultData
public class ResultData
{
public float Msee { get; set; }
public float R2 { get; set; }
....
}
我获取了这些数据并对其进行了反序列化:
var resultDataModel = JsonConvert.DeserializeObject<Models.ResultData>(content);
相应地映射数据
var resultData = resultDataModel.ToData();
然后保存到数据库:
await _dataContext.ResultData.AddAsync(resultData);
现在我想要对我的代码进行的更改是如果我的传入 JSON 是嵌套的,即
{
"train": {
"msee": 0.00011604210158111528,
"r2": 1.0,
"std": 0.010741780512034893,
"avg": -0.0009074629051610827,
"min": -0.022330284118652344,
"max": 0.2726593017578125,
"out_file": "train.png"
},
"test":{
"msee": 11976.16796875,
"r2": -0.8027065992355347,
"std": 109.59520721435547,
"avg": -2.3448710441589355,
"min": -386.17926025390625,
"max": 405.26837158203125,
"out_file": "test.png"
}
}
我的方法是创建字典并打印:
var dict = JsonConvert.DeserializeObject<Dictionary<string, Models.ResultData>>(content);
foreach (var x in dict)
{
Console.WriteLine($"{x.Key}: {x.Value}");
}
这将输出类似
train: 0.0001160421 1...
test: 11976.168 -0.8027066 ...
我的问题是我将如何对我的初始代码版本采取类似的方法,以便它首先获取train
字典中的 JSON,对其进行映射,然后存储 1 行,然后使用第二个嵌套 JSON test
,相应地再次映射数据并另存为另一行。
解决方案
你可以这样做:
var dict = JsonConvert.DeserializeObject<Dictionary<string, Models.ResultData>>(content);
foreach (var x in dict)
{
Console.WriteLine($"{x.Key}: {x.Value}");
_dataContext.ResultData.Add(x.Value.ToData());
}
await _dbContext.SaveChangesAsync();
推荐阅读
- c# - 从所有 Excel 工作表中创建一个数组
- r - Surface Pro 4 上的“xlsx”“无法创建 Java 虚拟机”的 .onLoad 失败
- javascript - Javascript:在承诺中解决和拒绝的目的是什么?
- sql-server - 使用 Sqlite 进行 EF Core DbContext 测试并在生产中使用 SQL Server
- jquery - 带有 JQueryValidation 的表单不运行 validate() 函数
- javascript - Trouble connecting to blue-tooth devices using node noble on Windows
- centos7 - repmgr - Automate process of making primary to standby after failover
- android - how to use DPAD controls of remote in recycler view?
- xml - 在 xsl 中根据 xml 深度插入空格
- django - How to add a time stamp for all the fields in a model django