You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建构造函数填充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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:57:36