C#XML通用属性的序列化

时间:2011-02-03 14:08:31

标签: c# xml-serialization

我有以下课程:

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>

和for:

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

序列化后的xml:

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

有可能吗?

非常感谢。

马立克

2 个答案:

答案 0 :(得分:4)

您可以使用IXmlSerializable覆盖XmlSerializer的工作方式。

这样,您就可以获得正在寻找的输出。

答案 1 :(得分:0)

感谢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()扩展名是一种通用方法,用于序列化任何对象。

谢谢,

马立克