我有一个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; }
}
如何指定输出的序列化方法:
<MyClass>
<MyDateTime>2011-9-13T10:30:00Z</MyDateTime>
<MySubClass>ID-Name</MySubClass>
</MyClass>
答案 0 :(得分:2)
您使用的是XmlSerializer吗?如果是这样,您不需要包含[Serializable]属性,XmlSerializer会忽略它们。您可以通过在类型上实现IXmlSerializable接口来自定义序列化。
http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx
答案 1 :(得分:2)
这是我的首要任务......我没有像你一样在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; }
}