C# 每月每天举办活动的动态班级结构
我必须将JSON表示为类结构,以便在asp.net核心端点中使用它返回这些类。我需要返回当前月份的每一天所持有的对象,以及每天所持有的事件数组 这里是JSON,其中数字是一个月中的一天C# 每月每天举办活动的动态班级结构,c#,asp.net-core,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Webapi,我必须将JSON表示为类结构,以便在asp.net核心端点中使用它返回这些类。我需要返回当前月份的每一天所持有的对象,以及每天所持有的事件数组 这里是JSON,其中数字是一个月中的一天 [ { "1":[ { "Title":"Meeting", "DateTime":"12:40" }, { "Title":"Launch", "DateTime":"13:30" }
[
{
"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
{
公共字符串标题{get;set;}
公共字符串日期时间{get;set;}
}
公共2级
{
公共字符串标题{get;set;}
公共字符串日期时间{get;set;}
}
公共类MonthEventsResponseModel
{
公共IList 1{get;set;}
公共IList 2{get;set;}
//以此类推到31岁
}
因此,如果有更好的解决方案来实现这一点,我很高兴知道。创建一个类来描述一个事件:
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; }
}
一种方法是
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;
}
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; }
}
公共类事件
{
公共字符串标题{get;set;}
公共字符串日期时间{get;set;}
}
公共类MonthEventsResponseModel
{
公共字典事件{get;set;}
}
我会继续制作事件、日、月模型,每个模型负责序列化它们自己-
事件
一天
公共课日
{
公共字符串DayNo{get;set;}
公共列表事件{get;set;}
公共字符串MakeJson()
{
StringBuilder StringBuilder=新的StringBuilder();
stringBuilder.Append(“\”+DayNo+“\”:[”).AppendLine();
foreach(事件中的事件ev)
{
Append(ev.MakeJson());
}
stringBuilder.AppendLine().Append(“],”).AppendLine();
返回stringBuilder.ToString();
}
}
月
公共课月{
公共列表天数{get;set;}
公共字符串MakeJson()
{
StringBuilder StringBuilder=新的StringBuilder();
stringBuilder.Append(“[”)
.AppendLine().Append(“{”)
.AppendLine();
foreach(以天为单位的天)
{
追加(day.MakeJson());
}
stringBuilder.Append(“}”)
.AppendLine().Append(“]”)
.AppendLine();
}
}
填充模型后,只需在当月调用MakeJson(),就可以了。尽管
List 1
无法编译,但您应该使用List
,因为不是每个月都有31天。Altrnativly也是一个锯齿形数组,但我不确定这是否是你认为的“更好的解决方案”。请调用类<代码>天>代码>,并有一个属性<代码>月月< /COD>,这是1到(n)天。我不需要对对象进行反序列化,我需要将它们从类序列化为JSON。@IliyanIvanov请显示获取事件的实际数据源。我从EF Core 2.2的事件实体类获取它们。dbContext.Event(返回IQueryable)@IliyanIvanov您需要将您的问题添加到事件的源代码中
classI解决我的问题,谢谢您的帮助。我需要的类结构是字典Tanks you man,事实上,如果那天没有活动,我不需要填写所有的天,但是你的解决方案非常有用,所以我最好接受你的答案。:)
string json = JsonConvert.SerializeObject(model);
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; }
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();
}
}