假设我有 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) 将两个类都添加为第三个类中的公共属性。
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();