C# 银行假日日历

C# 银行假日日历,c#,json,C#,Json,我有一个ASP MVC项目,该项目正在访问API以获取银行假期日期: 然而,当我解析JSON时,当我试图深入到“事件”级别时,我会遇到问题。目前我有: var json = new WebClient().DownloadString("https://www.gov.uk/bank-holidays.json"); JavaScriptSerializer serializer = new JavaScriptSerializer(); var test = serializer.Deseri

我有一个ASP MVC项目,该项目正在访问API以获取银行假期日期:

然而,当我解析JSON时,当我试图深入到“事件”级别时,我会遇到问题。目前我有:

var json = new WebClient().DownloadString("https://www.gov.uk/bank-holidays.json");
JavaScriptSerializer serializer = new JavaScriptSerializer();
var test = serializer.Deserialize<Dictionary<string, Dictionary<string, object>>>(json);
我原以为这会很简单,但我已经尝试了一切。我肯定我错过了一些简单的东西


谢谢

不要使用
JavaScriptSerializer
更好的选择是

在站点上,您可以从JSON生成类:

public class Event
{
    public string title { get; set; }
    public string date { get; set; }
    public string notes { get; set; }
    public bool bunting { get; set; }
}

public class EnglandAndWales
{
    public string division { get; set; }
    public List<Event> events { get; set; }
}

public class Scotland
{
    public string division { get; set; }
    public List<Event> events { get; set; }
}

public class NorthernIreland
{
    public string division { get; set; }
    public List<Event> events { get; set; }
}

public class RootObject
{
    [JsonProperty(PropertyName = "england-and-wales")]
    public EnglandAndWales EnglandAndWales { get; set; }
    public Scotland scotland { get; set; }
    [JsonProperty(PropertyName = "northern-ireland")]
    public NorthernIreland NorthernIreland { get; set; }
}

不要使用
JavaScriptSerializer
更好的选择是

在站点上,您可以从JSON生成类:

public class Event
{
    public string title { get; set; }
    public string date { get; set; }
    public string notes { get; set; }
    public bool bunting { get; set; }
}

public class EnglandAndWales
{
    public string division { get; set; }
    public List<Event> events { get; set; }
}

public class Scotland
{
    public string division { get; set; }
    public List<Event> events { get; set; }
}

public class NorthernIreland
{
    public string division { get; set; }
    public List<Event> events { get; set; }
}

public class RootObject
{
    [JsonProperty(PropertyName = "england-and-wales")]
    public EnglandAndWales EnglandAndWales { get; set; }
    public Scotland scotland { get; set; }
    [JsonProperty(PropertyName = "northern-ireland")]
    public NorthernIreland NorthernIreland { get; set; }
}

我非常鼓励您使用json.net lirary

我认为您这里的关键问题是您需要在类型定义中使用您的类型(BankHoliday):

Dictionary<string, <Dictionary<string, BankHoliday>>

Dictionary我非常鼓励您使用json.net lirary

我认为您这里的关键问题是您需要在类型定义中使用您的类型(BankHoliday):

Dictionary<string, <Dictionary<string, BankHoliday>>
字典为什么不直接使用

public IHttpActionResult BankHolidays()
{
var rawJson=string.Empty;
使用(var webClient=new webClient())
{
webClient.Encoding=Encoding.UTF8;//预期的内容类型响应为“application/json;charset=utf-8”
rawJson=webClient.DownloadString(“https://www.gov.uk/bank-holidays.json");
}
动态json=JsonConvert.DeserializeObject(rawJson);
返回Ok(json);
}
为什么不直接使用

public IHttpActionResult BankHolidays()
{
var rawJson=string.Empty;
使用(var webClient=new webClient())
{
webClient.Encoding=Encoding.UTF8;//预期的内容类型响应为“application/json;charset=utf-8”
rawJson=webClient.DownloadString(“https://www.gov.uk/bank-holidays.json");
}
动态json=JsonConvert.DeserializeObject(rawJson);
返回Ok(json);
}

请不要使用不推荐使用的JavaScriptSerializer!甚至Web API也使用Json.NET。JavaScriptSerializer是在JSon标准化之前构建的。此外,为什么您要尝试反序列化到字典而不是具体的类,例如国家、部门、事件?另一种替代json api的方法是使用nager.date nuget包,您还支持uk,请不要使用不推荐使用的JavaScriptSerializer!甚至Web API也使用Json.NET。JavaScriptSerializer是在JSon标准化之前构建的。此外,为什么您要尝试反序列化到字典而不是具体的类,例如国家、部门、事件?另一种替代json api的方法是使用nager.date nuget包,您还支持uk,这很好,谢谢。关于如何处理糟糕的命名约定有什么想法吗?一旦我从apiI中得到json字符串,我就可以做一个简单的字符串替换来处理它。太好了,谢谢。关于如何处理糟糕的命名约定有什么想法吗?一旦我将apiI中的json字符串更改为
RootObject
来处理它,我就可以做一个简单的字符串替换。如果可能的话,应该避免使用
dynamic
,因为这比使用具体的类定义要慢得多。在这种情况下,
BankHoliday
Country
的数据结构是已知的,并且不太可能更改,因此实际上不需要
动态的
。如果性能是最重要的,那么这是公平的。然而,仍然需要考虑技术要求,如有非静态类型语言的互操作(例如Python)<代码>动态< /代码>,如果可能的话,应该避免,因为它比有具体的类定义要慢得多。在这种情况下,
BankHoliday
Country
的数据结构是已知的,并且不太可能更改,因此实际上不需要
动态的
。如果性能是最重要的,那么这是公平的。然而,仍然必须考虑技术要求,例如使用非静态类型语言的互操作(例如Python)。
Dictionary<string, <Dictionary<string, BankHoliday>>
public IHttpActionResult BankHolidays()
    {
        var rawJson = string.Empty;
        using (var webClient = new WebClient())
        {
            webClient.Encoding = Encoding.UTF8; // Expected Content-Type response is "application/json; charset=utf-8"
            rawJson = webClient.DownloadString("https://www.gov.uk/bank-holidays.json");
        }
        dynamic json = JsonConvert.DeserializeObject<dynamic>(rawJson);
        return Ok(json);
    }