2014-04-30 3 views
0

У меня есть ряд классов для создания XML-файла SEPA. Каждый класс по существу «ROOT» с его элементами сериализовать [XmlElement («NAME»)]Изменение имени элемента xml перед сериализацией

Один из моих классов под названием «OrgId» для элемента OrgId того же имени, которое вы видите в приведенном ниже XML

<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 
     } 

Однако, если я хочу изменить этого элемента t от «OrgId» до «PrvtId», как я могу это сделать?

Я пробовал наследовать базовый класс, но сериализация не работала бы с унаследованными классами. Затем я изучил это, и я попытался поместить [XmlType («NAME OF BASE CLASS»)] над классами, но это не сработало.

Я также думал о том, копию тех классов, которые составляют документ XML и использовать другое пространство имен для каждого, но это еще не правильно на всех и просто вызывают больше и больше ненужный работу.

Мне было интересно, есть ли способ изменить имя элемента на основе условия, до происходит сериализация и класс сохраняется как файл XML на моем жестком диске?

Благодаря

ответ

0

хорошо, это UGLY ответ, но вы всегда можете сериализовать в строку вместо, а затем заменить метки в строке на основе вашего состояния. Но это уродливый способ сделать это.

По моему опыту, когда вы указываете «специальное» имя для XMLElement с помощью [XmlElement («Name»)], десериализатор должен правильно выбрать это и десериализовать обратно в свойство.

Смежные вопросы