如何将两个相同的类对象合并为一个
本文关键字:合并 对象 一个 两个 | 更新日期: 2023-09-27 18:03:09
我创建了一个名为Phrases的类,其中包含一些字符串和整数。
public class Phrases {
public class PhraseData {
public string text { get; set; }
public string htmlColor { get; set; }
public int position { get; set; }
}
public PhraseData intro { get; set; }
public PhraseData credit { get; set; }
public PhraseData general { get; set; }
/* and more PhraseDatas... */
}
/* ... */
和我有两个json文件。一种是只有PhraseData的文本数据,另一种是除了文本数据以外的所有数据。如果我反序列化这些json文件。我将得到两个像这样的Phrases类对象。
Phrases onlyTextFilled;
Phrases everyDataFilledExceptText;
我想把这两个类对象合并成一个。有什么好的方法来解决这个问题吗?
帮帮我!
又快又脏。重载'+'操作符。对于内部类和主类。还要添加属性以忽略属性的默认值和空值(如果使用Newtonsoft。例如Json)。另一个大胆的想法是,你可以使用装饰器模式。
public class Phrases
{
public class PhraseData
{
[JsonProperty(NullValueHandling = NullValueHandling.Ignore, Order = 1, DefaultValueHandling = DefaultValueHandling.Ignore)]
public string text { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore, Order = 2, DefaultValueHandling = DefaultValueHandling.Ignore)]
public string htmlColor { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore, Order = 3, DefaultValueHandling = DefaultValueHandling.Ignore)]
public int position { get; set; }
public static PhraseData operator + (PhraseData pd1, PhraseData pd2)
{
var pd = new PhraseData();
pd.text = (pd1.text == null) ? pd2.text : pd1.text;
pd.htmlColor = (pd1.htmlColor == null) ? pd2.htmlColor : pd1.htmlColor;
pd.position = (pd1.position == 0) ? pd2.position : pd1.position;
return pd;
}
}
public PhraseData intro { get; set; }
public PhraseData credit { get; set; }
public PhraseData general { get; set; }
public static Phrases operator + (Phrases p1, Phrases p2)
{
return new Phrases() {
intro = p1.intro + p2.intro,
credit = p1.credit + p2.credit,
general = p1.general + p2.general
};
}
}