从 API 调用的结果来看,我有大量的 JSON 需要处理。
我目前有这个
Object convertObj = JsonConvert.DeserializeObject(responseFromServer);
Run Code Online (Sandbox Code Playgroud)
我知道我可以做类似的事情
Movie m = JsonConvert.DeserializeObject<Movie>(responseFromServer);
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它
m.FieldName
m.AnotherField
//etc
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想做类似的事情
var itemName = convertObj["Name"];
Run Code Online (Sandbox Code Playgroud)
获取列表中第一项的第一个 Name 值。
这是可能的,还是我必须创建一个类来反序列化?
我不想创建类的原因是我不是 API 的所有者,并且字段结构可能会改变。
编辑。
好的,所以我创建了这个类,因为它似乎是最好的方法,但是有没有办法将 JSON 反序列化为列表?
var sessionScans = new List<SessionScan>();
sessionScans = JsonConvert.DeserializeObject<SessionScan>(responseFromServer);
Run Code Online (Sandbox Code Playgroud)
抱怨它无法将 SessionScan 转换为通用列表。
Ana*_*ran 12
对于.NET 6,可以按如下方式完成此操作,
using System.Text.Json;
using System.Text.Json.Nodes;
string jsonString = @"some json string here";
JsonNode forecastNode = JsonNode.Parse(jsonString)!;
int temperatureInt = (int)forecastNode!["Temperature"]!;
Console.WriteLine($"Value={temperatureInt}");
//for nested elements, you can access as below
int someVal = someNode!["someParent"]["childId"]!.ToString();
Run Code Online (Sandbox Code Playgroud)
请参阅此MS 文档页面以获取更多示例 - 使用创建对象initializers、生成changesDOM、反序列化subsectionJSON 有效负载。
无需使用dynamic,您可以简单地使用JTokenwhich 已经满足您的期望:
var json = @"
{
""someObj"": 5
}
";
var result = JsonConvert.DeserializeObject<JToken>(json);
var t = result["someObj"]; //contains 5
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用JObject.Parse:
dynamic convertObj = JObject.Parse("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");
string name = convertObj.Name;
string address = convertObj.Address.City;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6902 次 |
| 最近记录: |