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

时间:2011-09-13 15:41:05

标签: c# xml-serialization

我有一个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>

2 个答案:

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