2016-10-31 1 views
0

J'ai une classe qui ressemble à ceci:Hériter nom de l'élément parent en enfant avec C# XmlSerializer

public class CustomerType 
{ 
    public string Address {get; set;} 
    public string City {get; set;} 
} 

Et une autre classe comme ceci:

public class CustomerInfo 
{ 
     public CustomerType Sender {get; set;} 
     public CustomerType Reciever {get; set;} 
} 

Comment configurer XmlSerializer pour que je obtenir le XML suivant?

<CustomerInfo> 
    <Sender> 
     <SenderAddress></SenderAddress> 
     <SenderCity></SenderCity> 
    </Sender> 
    <Receiver> 
     <ReceiverAddress></ReceiverAddress> 
     <ReceiverCity></ReceiverCity> 
    </Receiver> 
</CustomerInfo> 

L'API Je travaille avec nécessite cette mise en forme, qui est que le nom de l'élément CustomerType se préfixé aux noms d'éléments d'enfant lorsqu'ils sont sérialisés.

+1

Je ne pense pas que vous pouvez le faire simplement, peut-être qu'il est plus facile de créer 2 différentes classes ' 'Adresse: un avec' 'expéditeur * champs et l'autre avec' récepteur * '. – aghidini

Répondre

0

Essayez cette

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Xml; 
using System.Xml.Serialization; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 

      CustomerInfo info = new CustomerInfo() 
      { 
       Sender = new CustomerSender() 
       { 
        Address = "123", 
        City = "North Pole" 
       }, 
       Reciever = new CustomerReceiver() 
       { 
        Address = "456", 
        City = "South Pole" 
       } 
      }; 

      XmlSerializer serializer = new XmlSerializer(typeof(CustomerInfo)); 

      StreamWriter writer = new StreamWriter(FILENAME); 
      serializer.Serialize(writer, info); 
      writer.Flush(); 
      writer.Close(); 
      writer.Dispose(); 

     } 
    } 
    [XmlRoot("Sender")] 
    public class CustomerSender 
    { 
     [XmlElement("SenderAddress")] 
     public string Address { get; set; } 

     [XmlElement("SenderCity")] 
     public string City { get; set; } 
    } 
    [XmlRoot("Receiver")] 
    public class CustomerReceiver 
    { 
     [XmlElement("ReceiverAddress")] 
     public string Address { get; set; } 

     [XmlElement("ReceiverCity")] 
     public string City { get; set; } 
    } 
    public class CustomerInfo 
    { 
     [XmlElement("Sender")] 
     public CustomerSender Sender { get; set; } 

     [XmlElement("Receiver")] 
     public CustomerReceiver Reciever { get; set; } 
    } 
}