在序列化之前更改xml元素名称
本文关键字:xml 元素 序列化 | 更新日期: 2023-09-27 18:01:13
我已经构建了一系列类来创建SEPA XML文件。每个类本质上都是一个"ROOT",其元素用[XmlElement("NAME"(]序列化
我的一个类被命名为"OrgId",用于与您在下面的XML 中看到的名称相同的OrgId元素
<GrpHdr>
<MsgId>0000001XXXXXXX</MsgId>
<CreDtTm>2014-04-30T15:08:04</CreDtTm>
<NbOfTxs>100</NbOfTxs>
<CtrlSum>500.00</CtrlSum>
<InitgPty>
<Id>
<OrgId>
<Othr>
<Id>IE01XXX999999</Id>
</Othr>
</OrgId>
</Id>
</InitgPty>
</GrpHdr>
因此,一旦我更新了所有的值,并准备将我的类序列化为一个完整的XML文档我使用以下代码将文件写入硬盘:
XmlSerializer serializer = new XmlSerializer(typeof(SEPABuilder.DefaultFileSection.Document));
try
{
using (TextWriter writer = new StreamWriter(@"C:'Xml.txt"))
{
serializer.Serialize(writer, doc, namespaces);
}
}
catch (Exception ex)
{
// DO SOMETHING WITH EXCEPTION
}
但是,如果我想将此元素名称从"OrgId"更改为"PrvtId",我该怎么做?
我尝试继承一个基类,但序列化无法使用继承的类。然后我对此进行了研究,并尝试将[XmlType("NAME OF BASE CLASS"(]放在派生类之上,但这不起作用。
我还考虑过拥有一个组成xml文档的类的副本,并使用每个名称空间都有不同的名称空间名称,但这根本不正确,只会导致越来越多不必要的工作。
之前,我想知道有没有任何方法可以根据条件更改元素名称序列化发生了,并且类以XML文件的形式保存到我的硬盘上?
感谢
好吧,这是UGLY的答案,但您可以始终序列化为字符串,然后根据您的条件替换字符串中的标记。但这是一种丑陋的做法
根据我的经验,当您使用[XMLElement("name"(]为XMLElement指定一个"特殊"名称时,反序列化程序应该获取该名称并正确地反序列化回属性。