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

C# 使用特定方法控制XML序列化格式,c#,xml-serialization,C#,Xml Serialization,我有一个DateTime和一个子类,我想专门针对XML序列化进行格式化。通常,在不指定任何内容的情况下,DateTime的序列化只会遵循当前区域性,但我希望DateTime以某种方式格式化(即使不可反序列化),与子类一样 因此,考虑到这些类别: public class MyClass { public DateTime MyDateTime { get; set; } public MySubClass TheSubClass { get; set; } } public c

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

2011-9-13T10:30:00Z
身份证名称

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


这是我想不起来的…我没有像您那样在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序列化:检查

更新

我错过了我想要以某种方式格式化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; }
}

我的坏习惯是,我总是认为需要
[Serializable]
。谢谢,谢谢。对于Name,它实际上是元素的一部分,MySubClass标记中的ID Name,但我通过luksan的回答得到了答案。@IAbstract[xmlement]public class MySubClass results“属性'xmlement'在此声明类型上无效。它仅对'property,indexer,field,param,return'声明有效。”@贝吉:关于第一个例子?我会复习…但乍一看,你是对的。谢谢你的编辑和良好的回答。。。对于这篇有用的文章,我以前做过+1