我有问题:
我必须将类序列化为 XML 文件。但两个属性必须使用相同的名称:
所需的 XML:
<?xml version="1.0"?>
<Test>
<HeaderText>
<Tag1>AAA</Tag1>
</HeaderText>
<HeaderText>
<Tag2>BBB</Tag2>
</HeaderText>
</Test>
我不需要将其反序列化回对象。
Code:
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 名称或命名空间。
我能做些什么?
现实世界的例子:
<Product>
<RecordReference>1-15991</RecordReference>
<MainSubject>
<MainSubjectSchemeIdentifier>66</MainSubjectSchemeIdentifier>
<SubjectCode>2</SubjectCode>
</MainSubject>
<MainSubject>
<MainSubjectSchemeIdentifier>20</MainSubjectSchemeIdentifier>
<SubjectHeadingText>Venäläisiä kirjoja: uskonto, teosofia, mystiikka</SubjectHeadingText>
</MainSubject>
</Product>
使用数组:
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<string>
.
UPDATE:
对于复杂的对象,您可以定义一个模型:
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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)