我有这个json:
"rates": {
"AT": {
"country": "Austria",
"standard_rate": 20.00,
"reduced_rate": 10.00,
"reduced_rate_alt": 13.00,
"super_reduced_rate": false,
"parking_rate": 12.00
},
"BE": {
...
我尝试用这个类来映射这个json,但是我遇到了一个问题,因为json被标记为Tag是一个Object。我需要成为一个归属
public class Rate{
public string Tag { get; set; }
public string country { get; set; }
public double standard_rate { get; set; }
public double reduced_rate { get; set; }
public double reduced_rate_alt { get; set; }
public bool super_reduced_rate { get; set; }
public double parking_rate { get; set; }
}
我如何将其映射到一个sigle对象?提前致谢
答案 0 :(得分:3)
如果查看发布的(部分)JSON,您要引用Tag
的内容与其他数据的级别不同。忽略大括号并查看缩进。
它似乎意味着用作词典并且可以轻松地反序列化。
{
"rates": {
"AT": {
"country": "Austria",
"standard_rate": 20.00,
"reduced_rate": 10.00,
"reduced_rate_alt": 13.00,
"super_reduced_rate": false,
"parking_rate": 12.00
},
"BE": {
"country": "Belguim",
...
}
}
}
课程:
public class VRates
{
public Dictionary<string, VRate> rates { get; set; }
}
public class VRate
{
public string country { get; set; }
public float standard_rate { get; set; }
public float reduced_rate { get; set; }
public float reduced_rate_alt { get; set; }
public bool super_reduced_rate { get; set; }
public float parking_rate { get; set; }
}
使用它的代码(使用JSON.NET):
string jstr = ... json from where ever
VRates rates = JsonConvert.DeserializeObject<VRates>(jstr);
您的“标签”将成为便于查找的按键。如果你愿意,你可以脱离外层阶级:
var rates = JsonConvert.DeserializeObject<VRates>(jstr).rates;
foreach (KeyValuePair<string, VRate> kvp in rates)
{
Console.WriteLine("key: {0}, country: {1}", kvp.Key, kvp.Value.country);
}
输出:
关键词:AT,国家:奥地利
关键:BE,国家:Belguim
如果您真的想在费率类中使用该代码,则可以将其复制到新属性,然后将字典值集合提取到List<VRate>
或编写转换器以复制/移动它。