如何创建构造函数填充XmlElement与属性,简化XML序列化的List元素添加
如何通过构造函数简化XML序列化中List元素的添加?
很简单,你只需要给ElProp类添加一个带参数的构造函数,同时注意保留无参构造函数(这是XmlSerializer的要求,不然序列化/反序列化会报错),就能实现你想要的简洁写法。
修改后的ElProp类代码
public class ElProp { // 必须保留无参构造函数,XmlSerializer需要它来实例化对象 public ElProp() {} // 自定义带参数的构造函数,直接初始化属性 public ElProp(string propertyName, string propertyVal) { PropertyName = propertyName; PropertyVal = propertyVal; } [XmlAttribute("Name")] public string PropertyName { get; set; } [XmlText] public string PropertyVal { get; set; } }
主函数中的简化用法
现在你就可以用一行代码直接创建并添加元素,替代原来繁琐的分步初始化:
static void Main(string[] args) { PromoticXML xmlDoc = new PromoticXML(); xmlDoc.Cfg.Content.ContentVer = "80323"; // 直接通过构造函数创建并添加元素 xmlDoc.Cfg.Content.Properties.Add(new PromoticXML.ElProp("neco", "necojineho")); xmlDoc.Cfg.Content.Properties.Add(new PromoticXML.ElProp("someName", "someText")); // 序列化逻辑保持不变 XmlWriterSettings xmlSet = new XmlWriterSettings(); xmlSet.Encoding = Encoding.Unicode; xmlSet.Indent = true; xmlSet.IndentChars = " "; XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); XmlSerializer serializer = new XmlSerializer(typeof(PromoticXML)); using (XmlWriter writer = XmlWriter.Create("promotic.xml", xmlSet)) { serializer.Serialize(writer, xmlDoc); } Process.Start("notepad.exe", "promotic.xml"); }
关键注意点
为什么必须保留无参构造函数?因为XmlSerializer在处理对象时,会默认调用无参构造函数来创建实例。如果省略它,运行时会抛出InvalidOperationException,提示找不到合适的构造函数。所以哪怕这个无参构造函数是空的,也一定要加上。
内容的提问来源于stack exchange,提问作者Ondřej Michejda
相关产品推荐
相关产品推荐

