两次序列化XML相同的标记
我有问题:
我必须将类序列化为XML文件。 但是必须使用相同的名称命名两个属性:
期望的xml:
AAA BBB
我不需要将它反序列化回对象。
码:
public class Header1 { [XmlElement("Tag1")] public String Tag1 { get; set; } } public class Header2 { [XmlElement("Tag2")] public String Tag2 { get; set; } } public class Test { [XmlElement("HeaderText")] public Header1 Header1 { get; set; } [XmlElement("HeaderText")] public Header2 Header2 { get; set; } } var doc = new Test { Header1 = new Header1 { Tag1 = "AAA" }, Header2 = new Header2 { Tag2 = "BBB" } }; var xml = new XmlSerializer(typeof(Test)); using (var fs = new FileStream("test.xml", FileMode.Create)) { xml.Serialize(fs, doc); }
此代码不起作用。
来自命名空间”的XML元素’HeaderText’已经存在于当前范围中。 使用XML属性为元素指定另一个XML名称或命名空间。
我能做什么?
现实世界的例子:
1-15991 66 2 20 Venäläisiä kirjoja: uskonto, teosofia, mystiikka
使用数组:
public class Test { [XmlElement("HeaderText")] public string[] HeaderText { get; set; } }
然后:
var doc = new Test { HeaderText = new[] { "AAA", "BBB" } }; var xml = new XmlSerializer(typeof(Test)); using (var fs = new FileStream("test.xml", FileMode.Create)) { xml.Serialize(fs, doc); }
也适用于List
。
更新:
对于复杂对象,您可以定义模型:
public class Header { public string Tag { get; set; } }
然后你有这个模型的集合:
public class Test { [XmlElement("HeaderText")] public Header[] HeaderText { get; set; } }
然后你序列化:
var doc = new Test { HeaderText = new[] { new Header { Tag = "AAA" }, new Header { Tag = "BBB" } } }; var xml = new XmlSerializer(typeof(Test)); using (var fs = new FileStream("test.xml", FileMode.Create)) { xml.Serialize(fs, doc); }
您可以告诉序列化程序忽略您当前的属性,并为序列化添加一个新属性:
public class Test { [XmlIgnore] public String Header1 { get; set; } [XmlIgnore] public String Header2 { get; set; } [XmlElement("HeaderText")] public String[] HeaderText { get{ return new[]{Header1,Header2}; } set{ if(value.Length == 2) { Header1 = value[0]; Header2 = value[1];} } } }
实例: http : //rextester.com/YVEF64085
上述就是C#学习教程:两次序列化XML相同的标记分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/984200.html