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

时间:2014-04-30 15:40:22

标签: c# xml

我构建了一系列用于创建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
        }

但是,如果我想从&#39; OrgId&#39;更改此元素名称到&#39; PrvtId&#39;我怎么能这样做?

我尝试继承基类,但序列化不适用于继承的类。 然后我调查了这个,并尝试将[XmlType(&#34;基本类别和#34;)]放在派生类之上,但这不起作用。

我还想过拥有构成xml文档并使用的类的副本 每个名称空间的名称不同,但根本不正确,只会导致 越来越多的不必要的工作。

我想知道是否有任何方法可以根据条件更改元素名称 序列化发生,类被保存为我的硬盘驱动器的XML文件?

由于

1 个答案:

答案 0 :(得分:0)

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

根据我的经验,当你指定一个特殊的&#34;使用[XmlElement(&#34; Name&#34;)]的XMLElement的名称,反序列化器应该选择它并正确地反序列化回属性。