将日期时间对象列表转换为特定的JSON格式

时间:2019-07-16 13:54:17

标签: c# .net json datetime

我正在使用特定的Javascript日历工具来显示发生事件的日期。此日历工具接受以下格式的数据:

{
  "2019": {
    "7": {
      "2": [
        {}
      ],
      "13": [
        {}
      ],
      "27": [
        {}
      ]
    },
    "8": {
      "18": [
        {}
      ]
    }
  }
}

这看起来不是json的典型日期格式。我正在尝试将C#中的Datetime对象列表转换为这种格式,但未能做到这一点。是否可以通过使用C#中的List类型来构造给定上述格式的JSON对象?

我尝试使用.NET的JavascriptSerializer构造对象,但这没有用。格式不正确。

2 个答案:

答案 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());