如何创建构造函数来填充xmlelement和属性?

时间:2018-01-12 13:47:06

标签: c# xml

我有复杂的类,我想使用costum属性序列化为XML格式。我被困在XMLelement这是List,我想用构造函数生成新项目,我可以在其中填充属性名称和文本值。

现在我必须创建单独的对象以及我可以添加到List中的对象。我想简化这个。

要序列化的类:

        [XmlElement("Cfg")]
        public ElCfg Cfg = new ElCfg();

        public class ElCfg

        {
            [XmlAttribute("Name")]  public string CfgName { get; set; } = "Default";
            [XmlElement("Content")] public ElCont Content = new ElCont();
        }

        public class ElCont
        {
            [XmlAttribute("ver")]   public string ContentVer { get; set; }
            [XmlElement("Prop")]    public List<ElProp> Properties = new List<ElProp>();
        }

        public class ElProp
        {
            [XmlAttribute("Name")]
            public string PropertyName { get; set; }

            [XmlText]
            public string PropertyVal { get; set; }
        }

在main中的用法:

        static void Main(string[] args)
        {
            //build promotic object
            PromoticXML xmlDoc = new PromoticXML();
            xmlDoc.Cfg.Content.ContentVer = "80323";


            PromoticXML.ElProp prop1 = new PromoticXML.ElProp();
            prop1.PropertyName = "neco";
            prop1.PropertyVal = "necojineho";

            PromoticXML.ElProp prop2 = new PromoticXML.ElProp();
            prop2.PropertyName = "neco";
            prop2.PropertyVal = "necojineho";

            xmlDoc.Cfg.Content.Properties.Add(prop1);
            xmlDoc.Cfg.Content.Properties.Add(prop2);

            //serialize promotic object
            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");
        }

我的目标是:

xmlDoc.Cfg.Content.Properties.Add(new PromoticXML.ElProp("someName", "someText"));

而不是:

PromoticXML.ElProp prop1 = new PromoticXML.ElProp();
prop1.PropertyName = "neco";
prop1.PropertyVal = "necojineho";


xmlDoc.Cfg.Content.Properties.Add(prop1);

0 个答案:

没有答案