Способ объединить 2 несвязанных объекта JSON - PullRequest
0 голосов
/ 28 декабря 2018

Предположим, у меня есть 2 объекта:

public class CInfo
{
    [JsonProperty(PropertyName = "Id")]
    public string cID { get; set; }

    [JsonProperty(PropertyName = "Name")]
    public string cName { get; set; }
}

public class Event
{
    [JsonProperty(PropertyName = "Time")]
    public DateTime dateTime { get; set; }

    [JsonProperty(PropertyName = "Note")]
    public string comment { get; set; } 
}

Пара функций возвращает следующее:

CInfo cInfo = getCInfo();
List<Event> = getEvents();

Обе они предназначены для объединения вместе в конечный (гипотетический) объектэто должно выглядеть так:

public class CInfoWithEvents
{
    [JsonProperty(PropertyName = "Id")]
    public string cID { get; set; }

    [JsonProperty(PropertyName = "Name")]
    public string cName { get; set; }

    [JsonProperty(PropertyName = "Events")]
    public List<Event> { get; set; }
}

В этот момент намеревается сделать JsonConvert.SerialzeObject(CInfoWithEvents) и получить строку json, представляющую этот конечный объект.

Вопрос: что лучшеспособ их объединить?Должен быть более элегантный способ, чем просто создание нового объекта и копирование каждого свойства или, что еще хуже, сериализация cInfo и List<Event> по отдельности и выполнение каких-либо манипуляций со строками.

Спасибо за потраченное время

1 Ответ

0 голосов
/ 28 декабря 2018

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

1) Добавить оба класса как открытое свойство в третий класс.

public class CInfoWithEvents
{
    [JsonProperty(PropertyName = "CInfo")]
    public CInfo  {get; set;}

    [JsonProperty(PropertyName = "Events")]
    public List<Event> { get; set; }
}

2) Наследовать отКласс CInfo и открытый список List.

public class CInfoWithEvents : CInfo
{        
    [JsonProperty(PropertyName = "Events")]
    public List<Event> { get; set; }
}

3) Создание на лету:

  var javaScriptSerializer = new JavaScriptSerializer();
  var resultJson =  javaScriptSerializer.Serialize(new { CInfo = getCInfo(), Events = getEvents()});

4) Использование JObject

    JObject jCInfo = JObject.FromObject(getCInfo());
    jCInfo.Add("Events", JArray.FromObject(getEvents()));
    string json = jCInfo.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...