2009-12-19 86 views
0

嗨,我打麻煩構造一個XmlSerializer其中額外的類型包含具有相同名稱(但唯一全名)的類型。下面是一個例子,說明了我的情況。在外部組件XmlSerializer結構具有相同的命名額外類型

類型定義我不能操縱:

public static class Wheel 
{ 
    public enum Status { Stopped, Spinning } 
} 

public static class Engine 
{ 
    public enum Status { Idle, Full } 
} 

I類已經寫和具有控制:

public class Car 
{ 
    public Wheel.Status WheelStatus; 
    public Engine.Status EngineStatus; 

    public static string Serialize(Car car) 
    { 
    var xs = new XmlSerializer(typeof(Car), new[] {typeof(Wheel.Status),typeof(Engine.Status)}); 

    var output = new StringBuilder(); 
    using (var sw = new StringWriter(output)) 
     xs.Serialize(sw, car); 

    return output.ToString(); 
    } 
} 

XmlSerializer的構造函數拋出與消息A System.InvalidOperationException

「時發生錯誤,反射型‘Engine.Status’」

此異常具有類型System.InvalidOperationException消息的並用的InnerException

「類型‘Wheel.Status’和「發動機.Status'都使用名稱空間''中的XML類型名稱'狀態'。使用XML屬性來指定類型的唯一的XML名稱和/或命名空間。」

既然我不能改變枚舉類型,我怎麼能構建一個XmlSerializer將成功序列化的車呢?

回答

0

我注意到的第一件事是,Car.Status不存在的。你的意思是Engine.Status

在任何情況下,如果這些枚舉類型被設計以這樣一種方式,他們不能被自動序列化,你將不得不手動序列化它們。

0

你可以在每個類的實現IXmlSerializable的接口序列化,那麼你會得到3種方法

GetSchema() 
ReadXml() 
WriteXml() 
中的getSchema方法

簡單地把return null;和中WriteXML()方法把代碼,你需要編寫XML,而序列化對象,並在ReadXml()方法中將您需要的代碼讀取ffrom xml文件並在反序列化時重新創建對象。

0

嘗試使用的XmlElement屬性:

public class Car 
{ 
    [XmlElement("WheelStatus")] 
    public Wheel.Status WheelStatus; 
    [XmlElement("EngineStatus")] 
    public Engine.Status EngineStatus; 

    ... 

} 

更新:只是嘗試這樣做,它似乎並沒有在這種情況下工作。

相關問題