将对象添加到 Umbraco 控制器中的列表

问题描述

我是强类型语言的新手,我正在开发一个 Umbraco 控制器,该控制器输出一些带有日期列表的 JSON。

"meetingTimes": [10:30,11:30]

效果很好。现在我想输出一个包含唯一键的时间的 extry 字段

所以应该是这样

meetingTimes: [{ time: "10:30",key: "abcd-1234-efgh-5678" },{ time: "11:30",key: "defg-1234-sktg-5678" }]

但我不知道该怎么做。

我当前处理此问题的代码部分是:

try {            
                IPublishedContent content = Umbraco.Content(Guid.Parse("ff3e93f6-b34f-4664-a08b-d2eae2a0adbd"));
                var meetingDatesAvailabled = content.Value<IEnumerable<IPublishedElement>>("meetingDatesAvailable");
            
                var items = new List<object>();
               
                foreach(var meetingDate in meetingDatesAvailabled)
                {
                    if (meetingDate.Value("meetingItemDay").ToString().Substring(0,8) == theDate) {
                        var times = meetingDate.Value<IEnumerable<IPublishedElement>>("meetingItemDayTimes");

                        foreach (var time in times)
                        {
                            items.Add(time.Value("meetingdateTimeItem").ToString());
                        }
                    }
                }

                return new { dateChosen = theDate,meetingTimes = items };
            }

解决方法

最初,我们必须创建一个抽象会议时间的类:

public class MeetingTime
{
    public string Time { get; }
    public Guid   Key  { get; }

    public MeetingTime(string time,Guid key)
    {
        Time = time;
        Key = key;
    }
} 

然后我们将创建一个 MeetingItem 的空列表,而不是创建一个 object,var items = new List<object>(); 的空列表。

var items = new List<MeetingItem>();

然后在你的内心foreach

foreach (var time in times)
{
    items.Add(new MeetingTime(time.Value("meetingdateTimeItem").ToString(),Guid.NewGuid())
    );
}

注意:我不知道您序列化对象的方式(例如 https://www.newtonsoft.com),但很可能您必须使用属性来装饰 TimeKey 属性以供使用序列化期间的正确名称。如果您不这样做,则它将使用默认名称 TimeKey。我这样说是因为我在你分享的 json 中注意到你想要成为 timekey