一种组合 2 个不相关的 JSON 对象的方法



假设我有 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字符串。

问题:将它们组合在一起的最佳方式是什么?必须有一种更优雅的方法,而不仅仅是创建全新的对象并复制每个属性,或者更糟的是:分别序列化cInfoList<Event>并执行某种字符串操作。

谢谢你的时间

除了复制两个类的每个属性之外,您还可以通过多种方式实现这一点:

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();

最新更新