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

本文关键字:XML 序列化 格式 控制 方法 | 更新日期: 2023-09-27 18:08:33

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

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

您是否使用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; }
}