Добавить объект в список в контроллере Umbraco

#c# #json #list #umbraco #strong-typing

Вопрос:

Я довольно новичок в строго типизированных языках и работаю над контроллером 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 };
            }
 

Ответ №1:

Изначально мы должны создать класс, который абстрагирует время встречи:

 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), но, вполне вероятно, вам придется украсить как свойства Time , так и Key атрибут для использования собственного имени во время сериализации. Если вы этого не сделаете, то он будет использовать имена по умолчанию, Time и Key . Я говорю это, потому что я заметил в json, которым вы поделились, что вы хотите быть time и key .

Комментарии:

1. Классно! Это именно то, что я искал! Спасибо!