2010-09-24 84 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