从VAT欧盟解析一个json

时间:2016-09-05 21:50:42

标签: c# json parsing c#-4.0

我有这个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对象?提前致谢

1 个答案:

答案 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>或编写转换器以复制/移动它。