Xml序列化。反序列化,并转换为不同的对象
问题描述:
public class MyClass
{
[XmlElement("Date")]
public DateTime Date { get; set; }
}
有人XML序列化到一个文件:
var myClass = new MyClass() { Date = new DateTime(2010, 09, 24) };
new XmlSerializer(typeof(MyClass)).Serialize(fileStream, myClass);
结果:
<MyClass>
<Date>2010-09-24T00:00:00</Date>
</MyClass>
之后,新的日期模板创建人:
public class MyDate
{
public int Year { get; set; }
public int Month { get; set; }
public int Date { get; set; }
}
,并在MyClass的,而不是使用的System.DateTime:
public class MyClass
{
[XmlElement("Date")]
public MyDate Date { get; set; }
}
我需要的是让下面的代码做工精细:
MyClass myClass = (MyClass)new XmlSerializer(typeof(MyClass)).Deserialize(fileStream);
问题是我无法改变的MyClass的。唯一可以改变的是MyDate类和序列化/反序列化代码。
如何使反序列化代码,以便从以前序列化的System.DateTime反序列化新类MyDate?
答
一个办法是实施IXmlSerializable
在MyDate
类,然后分析使用XmlConvert.ToDateTime
的ReadXml
方法日期字符串。
如果MyDate
类的目的是有一个不同的XML格式,那么你可以通过检查什么是元素中实际存在支持的ReadXml
方法两个输入格式,但总是写为新的格式在WriteXml
方法。
IXmlSerializable.ReadXml从不调用。我不知道为什么。有任何想法吗? – 2010-09-24 09:00:03
如果你已经在'MyDate'类型上实现了它,它应该总是被序列化器调用......不知道为什么它不会是我害怕的,它在我使用它之前一直都在工作。 – 2010-09-24 09:23:51