C# 使用特定方法控制XML序列化格式
我有一个DateTime和一个子类,我想专门针对XML序列化进行格式化。通常,在不指定任何内容的情况下,DateTime的序列化只会遵循当前区域性,但我希望DateTime以某种方式格式化(即使不可反序列化),与子类一样 因此,考虑到这些类别: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
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