在序列化之前更改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文件的形式保存到我的硬盘上?

感谢

在序列化之前更改xml元素名称

好吧,这是UGLY的答案,但您可以始终序列化为字符串,然后根据您的条件替换字符串中的标记。但这是一种丑陋的做法

根据我的经验,当您使用[XMLElement("name"(]为XMLElement指定一个"特殊"名称时,反序列化程序应该获取该名称并正确地反序列化回属性。