我正在使用特定的Javascript日历工具来显示发生事件的日期。此日历工具接受以下格式的数据:
{
"2019": {
"7": {
"2": [
{}
],
"13": [
{}
],
"27": [
{}
]
},
"8": {
"18": [
{}
]
}
}
}
这看起来不是json的典型日期格式。我正在尝试将C#中的Datetime对象列表转换为这种格式,但未能做到这一点。是否可以通过使用C#中的List类型来构造给定上述格式的JSON对象?
我尝试使用.NET的JavascriptSerializer构造对象,但这没有用。格式不正确。
答案 0 :(得分:0)
您应该创建一个代表您想要的模型。
public class Dates {
public string Year {get; set;}
public List<Months> Months {get; set;}
}
public class Months {
public string Month {get; set;}
public List<Day> Days {get; set;}
}
public class Days {
public string Day { get; set; }
}
然后,您可以创建日期列表(上面的根模型),并使用Newtonsoft将其转换为JSON。
(对不起,代码示例是徒手的,可能需要改编)
答案 1 :(得分:0)
使用自定义序列化器可能有更好的方法,但是您可以将其用作起点,使用Newtonsoft.Json.Linq:
var random = new Random();
var dates = new List<DateTime>();
for (int i = 0; i < 10; i++)
{
dates.Add(new DateTime(year: random.Next(2000, 2020), month: random.Next(1, 13), day: random.Next(1, 28)));
}
var json = new JObject();
foreach (var year in dates.GroupBy(d => d.Year).OrderBy(d => d.Key))
{
JObject yearJSON = new JObject();
foreach (var month in year.GroupBy(d=> d.Month).OrderBy(d => d.Key))
{
JObject monthJSON = new JObject();
foreach (var day in month.Select(d=> d.Day).OrderBy(d => d))
{
monthJSON.Add(day.ToString(), new JArray(new JObject()));
}
yearJSON.Add(month.Key.ToString(), monthJSON);
}
json.Add(year.Key.ToString(), yearJSON);
}
Console.WriteLine(json.ToString());