将 Json 转换为对象列表
Convert Json to List of Object
我正在调用 API 使用:
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(path);
String content = await response.Content.ReadAsStringAsync();
返回的content
如下Json:
{
"sensors": [
{ "value": "1.2", "valid": "true" },
{ "value": "1.1", "valid": "false" },
{ "value": "1.7", "valid": "true" }
]
}
例如,我需要将 valid
的所有传感器的值相加等于 true
。
我可以将 content
转换为对象列表并在不为类型定义 class 的情况下查询它吗?
如果您正在寻找“完全做到这一点”的真正脏代码,那么这里是:
// use package System.Text.Json
var sum = JsonObject.Parse(json)["sensors"]
.AsArray().OfType<JsonObject>()
.Where(x => x["valid"].GetValue<string>() == "true")
.Sum(x => double.Parse(x["value"].GetValue<string>()));
但是如果您打算在您正在处理的这段代码上做更多的工作,请听取其他建议为 Sensors
创建一个 C# class 和另一个为 SensorValue
和简单地反序列化它。
从JSON的形状来看,似乎不会有大量数据或性能很关键。然后将 JSON 反序列化为一些 classes 并在没有普通 JSON 结构的情况下处理这些对象更有意义。
我正在调用 API 使用:
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(path);
String content = await response.Content.ReadAsStringAsync();
返回的content
如下Json:
{
"sensors": [
{ "value": "1.2", "valid": "true" },
{ "value": "1.1", "valid": "false" },
{ "value": "1.7", "valid": "true" }
]
}
例如,我需要将 valid
的所有传感器的值相加等于 true
。
我可以将 content
转换为对象列表并在不为类型定义 class 的情况下查询它吗?
如果您正在寻找“完全做到这一点”的真正脏代码,那么这里是:
// use package System.Text.Json
var sum = JsonObject.Parse(json)["sensors"]
.AsArray().OfType<JsonObject>()
.Where(x => x["valid"].GetValue<string>() == "true")
.Sum(x => double.Parse(x["value"].GetValue<string>()));
但是如果您打算在您正在处理的这段代码上做更多的工作,请听取其他建议为 Sensors
创建一个 C# class 和另一个为 SensorValue
和简单地反序列化它。
从JSON的形状来看,似乎不会有大量数据或性能很关键。然后将 JSON 反序列化为一些 classes 并在没有普通 JSON 结构的情况下处理这些对象更有意义。