我有一个类,我需要从中做一些自定义XML输出,因此我实现了IXmlSerializable接口。但是,我想要使用默认序列化输出的一些字段,除了我想要更改xml标记名称。当我调用serializer.Serialize时,我在XML中获得了默认的标记名称。我能以某种方式改变这些吗?
这是我的代码:
public class myClass: IXmlSerializable
{
//Some fields here that I do the custom serializing on
...
// These fields I want the default serialization on except for tag names
public string[] BatchId { get; set; }
...
... ReadXml and GetSchema methods are here ...
public void WriteXml(XmlWriter writer)
{
XmlSerializer serializer = new XmlSerializer(typeof(string[]));
serializer.Serialize(writer, BatchId);
... same for the other fields ...
// This method does my custom xml stuff
writeCustomXml(writer);
}
// My custom xml method is here and works fine
...
}
这是我的Xml输出:
<MyClass>
<ArrayOfString>
<string>2643-15-17</string>
<string>2642-15-17</string>
...
</ArrayOfString>
... My custom Xml that is correct ..
</MyClass>
我最终想要的是:
<MyClass>
<BatchId>
<id>2643-15-17</id>
<id>2642-15-17</id>
...
</BatchId>
... My custom Xml that is correct ..
</MyClass>
答案 0 :(得分:7)
在许多情况下,您可以使用接受XmlSerializer
的{{1}}构造函数重载来指定此额外名称信息(例如,传递新的XmlAttributeOverrides
) - 但是,这不适用于阵列AFAIK。我希望在XmlRootAttribute
示例中,手动编写它会更简单。在大多数情况下,string[]
是一项额外的工作 - 我会尽可能地避免这样做。遗憾。
答案 1 :(得分:3)
您可以使用control the serialized XML属性标记字段。例如,添加以下属性:
[XmlArray("BatchId")]
[XmlArrayItem("id")]
public string[] BatchId { get; set; }
可能会帮助你。
答案 2 :(得分:0)
如果有人还在寻找这个,你绝对可以使用XmlArrayItem但是这需要是一个类中的属性。
为了便于阅读,您应该使用同一个单词的复数和单数。
/// <summary>
/// Gets or sets the groups to which the computer is a member.
/// </summary>
[XmlArrayItem("Group")]
public SerializableStringCollection Groups
{
get { return _Groups; }
set { _Groups = value; }
}
private SerializableStringCollection _Groups = new SerializableStringCollection();
<Groups>
<Group>Test</Group>
<Group>Test2</Group>
</Groups>
大卫