C # XML-сериализация общего свойства - PullRequest
3 голосов
/ 03 февраля 2011

У меня есть следующие классы:

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

и хотел бы получить за:

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

после xml после сериализации:

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

и для:

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

после xml после сериализации:

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

Возможно ли это?

Большое спасибо.

Marek

Ответы [ 2 ]

4 голосов
/ 03 февраля 2011

Вы можете использовать IXmlSerializable для переопределения работы XmlSerializer.

Таким образом, вы можете получить результат, который ищете.

0 голосов
/ 03 февраля 2011

Спасибо Pieter за ваш ответ.

Да, я реализовал интерфейс IXmlSerializable и метод WriteXml моего Reponse объекта выглядит следующим образом:

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

Serialize() extension - универсальный метод, который сериализует любой объект.

Спасибо,

Marek

...