2011-02-03 4 views
3

J'ai des classes suivantes:C# sérialisation XML de propriété générique

public class Response<T> 
{ 
    public string Status { get; set; } 
    public T GenericType { get; set; } 
} 
public class Order 
{ 
    public string Number { get; set; } 
} 
public class Customer 
{ 
    public string Name { get; set; } 
} 

et voudrais obtenir:

var r = new Response<Order>(); 
r.GenericType = new Order { Number = "1" }; 

suivant xml après sérialisation:

<Response><Order><Number>1</Number></Order></Response> 

et pour:

var r = new Response<Customer>(); 
r.GenericType = new Customer { Name = "Kowalski" }; 

suivant xml après sérialisation:

<Response><Customer><Name>Kowalski</Name></Customer></Response> 

Est-il possible?

Merci beaucoup.

Marek

Répondre

4

Vous pouvez utiliser IXmlSerializable pour remplacer la façon dont les travaux XmlSerializer.

De cette façon, vous pouvez obtenir la sortie que vous recherchez.

+0

Cool, merci pour votre réponse. S'il vous plaît voir ma réponse détaillée ci-dessous. – marek

0

Merci Pieter pour votre réponse.

Oui, je mis en œuvre l'interface IXmlSerializable et WriteXml méthode de mon objet Reponse s'annonce suit:

public void WriteXml(XmlWriter writer) 
{ 
    writer.WriteRaw(string.Format("<Status>{0}</Status>", Status)); 
    var xml = GenericType.Serialize(); 
    writer.WriteRaw(xml); 
} 

L'extension Serialize() est une méthode générique qui sérialise un objet.

Merci,

Marek