2010-09-24 86 views
0

我有类: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?

回答

0

一个办法是实施IXmlSerializableMyDate类,然后分析使用XmlConvert.ToDateTimeReadXml方法日期字符串。

如果MyDate类的目的是有一个不同的XML格式,那么你可以通过检查什么是元素中实际存在支持的ReadXml方法两个输入格式,但总是写为新的格式在WriteXml方法。

+0

IXmlSerializable.ReadXml从不调用。我不知道为什么。有任何想法吗? – 2010-09-24 09:00:03

+0

如果你已经在'MyDate'类型上实现了它,它应该总是被序列化器调用......不知道为什么它不会是我害怕的,它在我使用它之前一直都在工作。 – 2010-09-24 09:23:51