将JSON反序列化到C#.Net后如何访问嵌套类中的字段
本文关键字:访问 嵌套 字段 何访问 反序列化 JSON Net | 更新日期: 2023-09-27 18:21:27
我已成功使用JSON.NET反序列化AWS定价数据。
以下是使用json2csharp.net:从JSON生成的类
public class Prices
{
public string USD { get; set; }
}
public class ValueColumn
{
public string name { get; set; }
public Prices prices { get; set; }
}
public class Size
{
public string size { get; set; }
public List<ValueColumn> valueColumns { get; set; }
}
public class InstanceType
{
public string type { get; set; }
public List<Size> sizes { get; set; }
}
public class Region
{
public string region { get; set; }
public List<InstanceType> instanceTypes { get; set; }
}
public class Config
{
public string rate { get; set; }
public List<string> valueColumns { get; set; }
public List<string> currencies { get; set; }
public List<Region> regions { get; set; }
}
public class RootObject
{
public double vers { get; set; }
public Config config { get; set; }
}
当从RootObject(表示反序列化JSON对象的根)开始时,我不知道如何访问Prices类中的数据字段。假设我的RootObject被命名为"root",我可以达到:
Console.WriteLine(root.config.regions.count);
但我不知道如何递归地访问regions列表中的实际项目,然后是instanceTypes列表,等等,直到我找到Prices类。
稍微不同的是,我需要帮助从根级别一直到叶级别递归我的反序列化JSON对象,这样我就可以访问那里的数据字段(以及两者之间的任何地方)。我希望我已经清楚了,因为这是我第一次使用JSON/反序列化/C#。
谢谢你抽出时间!
以下是您可能想要做的事情:
var rootObject = JsonConvert.DeserializeObject<RootObject>(awsJsonData);
foreach(var region in rootObject.config)
{
//Work with regions here
foreach(var instanceType in region.instanceTypes)
{
//work with this regions instance types here
foreach(var size in instanceType.sizes)
{
//work with this instance types sizes here
(etc...)
}
}
}
一旦您在valuecolumn.prices中找到foreach价格,您就可以随心所欲地组合数据,因为父对象在foreach范围内可用。
使用LINQ
RootObject root = new RootObject();
var regions = root.config.regions;
var instanceTypes = regions.Select(x => x.instanceTypes);
var sizes = instanceTypes.Select(s => s.Select(c => c.sizes));
var valueColumns = sizes.Select(v => v.Select(p => p.Select(q => q.valueColumns)));
var prices = valueColumns.Select(x => x.Select(p => p.Select(r => r.Select(q => q.prices.USD))));