每月每天举行的动态阶级结构举行事件



我必须将json表示为类结构,以便我可以使用它在ASP.NET核心端点中返回这些类。我需要返回当前月的每一天,每天都有各种活动。

这是JSON,其中数字是一个月的一天。

[
  {
    "1":[
      {
        "Title":"Meeting",
        "DateTime":"12:40"
      },
      {
        "Title":"Launch",
        "DateTime":"13:30"
      }
    ],
    "2":[
      {
        "Title":"Test",
        "DateTime":"9:30"
      }
    ]
  }
]

这是代码:

public class 1
{
    public string Title { get; set; }
    public string DateTime { get; set; }
}
public class 2
{
    public string Title { get; set; }
    public string DateTime { get; set; }
}
public class MonthEventsResponseModel
{
    public IList<1> 1 { get; set; }
    public IList<2> 2 { get; set; }
    // and so on to 31
}

因此,如果有一个更好的解决方案来实现这一目标,我很高兴知道。

一种方法是,

1)创建一年中整个月的枚举,

public enum Month
{
    NotSet = 0,
    January = 1,
    February = 2,
    March = 3,
    April = 4,
    May = 5,
    June = 6,
    July = 7,
    August = 8,
    September = 9,
    October = 10,
    November = 11,
    December = 12
}

2)创建一种自定义方法,该方法可能需要一个月的特定年份以上的枚举,它计算给定月份的几天,每天都可以填写活动数据

public static MonthEventsResponseModel GetEventData(int year, Month month)
{
    var days = DateTime.DaysInMonth(year, (int)month);
    MonthEventsResponseModel model = new MonthEventsResponseModel();
    model.Events = Enumerable.Range(1, days)
        .Select(day => new
        {
            Day = day,
            Event = new List<Event>()  //<= Instead of new list, Fill Event data with respect to particular day from List or Database Call or API call
        })
        .ToDictionary(x => x.Day, y => y.Event);
    return model;
}

3)然后调用上面的方法,例如

MonthEventsResponseModel model = GetEventData(2018, Month.December);

4)最终将您的模型转换为JSON,

string json = JsonConvert.SerializeObject(model);

5)和类模型是

public class Event
{
    public string Title { get; set; }
    public string DateTime { get; set; }
}
public class MonthEventsResponseModel
{
    public Dictionary<int, List<Event>> Events { get; set; }
}

创建一个将描述事件的类:

public class Event
{
    public string Title { get; set; }
    public string DateTime { get; set; }
}

并将您的MonthEventsResponseModel修改为:

public class MonthEventsResponseModel
{
    public Dictionary<int, List<Event>> Events { get; set; }
}

现在,您可以使用DeserializeObject方法和一些LINQ对JSON进行测试:

var json = "[rn  {rn    "1":[rn      {rn        "Title":"Meeting",rn        "DateTime":"12:40"rn      },rn      {rn        "Title":"Launch",rn        "DateTime":"13:30"rn      }rn    ],rn    "2":[rn      {rn        "Title":"Test",rn        "DateTime":"9:30"rn      }rn    ]rn  }rn]";
var result = JsonConvert.DeserializeObject<Dictionary<string, Event[]>[]>(json)
    .Select(x => new MonthEventsResponseModel
    {
        Events = x.ToDictionary(k => int.Parse(k.Key), v => v.Value.ToList())
    }).ToArray();

我会继续进行活动,日,月模型,每个人都负责序列化 -

事件

    public class Event
    {
        public string Title { get; set; }
        public string DateTime { get; set; }
        public string MakeJson()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder
                .Append("  {").AppendLine()
                .Append("    "Title":"" + Meeting + "",").AppendLine()
                .Append("    "DateTime":"" + DateTime + """).AppendLine()
                .Append("  },").AppendLine();
            return stringBuilder.ToString();
        }
    }

    public class Day
    {
        public string DayNo { get; set; }
        public List<Event> Events { get; set; }
        public string MakeJson()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append(""" + DayNo + "":[").AppendLine();    
            foreach (Event ev in Events)
            {
                stringBuilder.Append(ev.MakeJson());
            }
            stringBuilder.AppendLine().Append("],").AppendLine();
            return stringBuilder.ToString();
        }
    }

    public class Month{
        public List<Day> Days { get; set; }
        public string MakeJson()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("[")
                .AppendLine().Append(" {")
                .AppendLine();
            foreach (Day day in Days)
            {
                stringBuilder.Append(day.MakeJson());
            }
            stringBuilder.Append(" }")
                .AppendLine().Append("]")
                .AppendLine();

        }
    }

填充模型后,只需在当月调用makejson(),就可以了。

最新更新