2016-10-31 1 views
0

Ich habe eine Klasse, die wie folgt aussieht:Inherit Mutterelementname in Kind mit C# XmlSerializer

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

Und eine andere Klasse wie folgt aus:

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

Wie konfiguriere ich die XmlSerializer so, dass ich das folgende XML erhalten?

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

Die API ich arbeiten bin erfordert diese Formatierung, die aus dem Customer Element, dass der Name auf den Elementnamen Kind Präfix wird, wenn serialisiert.

+1

Ich glaube nicht, dass man es einfach tun können, ist es vielleicht einfacher, 2 verschiedene 'address' Klassen zu erstellen: eine mit' Sender * 'Felder und das andere mit' Receiver * '. – aghidini

Antwort

0

testen Werde

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