使用特定方法控制XML序列化格式

我有一个DateTime和一个子类,我希望格式化XML序列化。 通常,在没有指定任何内容的情况下,DateTime的序列化将遵循当前的文化,但我希望以某种方式格式化DateTime(即使不可反序列化),同样是子类。

所以,给定这些类:

public class MyClass { public DateTime MyDateTime { get; set; } public MySubClass TheSubClass { get; set; } } public class MySubClass { public int ID { get; set; } public string Name { get; set; } } 

如何指定输出的序列化方法:

  2011-9-13T10:30:00Z ID-Name  

你在使用XmlSerializer吗? 如果是这样,您不需要包含[Serializable]属性,XmlSerializer会忽略它们。 您可以通过在类型上实现IXmlSerializable接口来自定义序列化。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

这是我的头脑…我没有像你一样嵌套在Xml序列化中的类型 – 但这应该是接近的。

 [XmlRoot] public class MyClass { [XmlElement] public DateTime MyDateTime { get; set; } [XmlElement] public MySubClass TheSubClass { get; set; } } [XmlRoot] public class MySubClass { [XmlElement] public int ID { get; set; } [XmlIgnore] // since you didn't include in XML snippet public string Name { get; set; } } 

如果您正在执行简单的Xml序列化:请检查MSDN XmlSerializer 。

更新

我错过了我想以某种方式格式化DateTime ……我所做的是以下而不是实现IXmlSerializable

 [XmlRoot] public class MyClass { [XmlElement] public string MyDateTime { get; set; } [XmlIgnore] public DateTime DT { get { /* return DateTime from MyDateTime */ } set { MyDateTime = value.ToString( /* use formatting */); } // ex. ToString("yyyy, MMMM dd : hh:mm") } [XmlElement] public MySubClass TheSubClass { get; set; } }