2009-07-17 52 views
0

我想將自定義對象保存爲VB.net應用程序中的用戶設置。該對象由一個List(Of Pair(Of String,Object))組成。 Pair是一個具有兩個讀/寫屬性(String和Object)的自定義類。用戶設置對象的XML序列

如果我把簡單的類型如int,string,datetime作爲我的pair的第二個值,那麼保存的設置沒有任何問題。但是,如果我嘗試將更復雜的東西(比如列表)放在序列化過程中出現問題,並且我的設置不會保存。在我對

字符串值序列如下:

<value1>Priority_1</value1> 

對象值那樣序列具有特殊屬性:

<value2 xsi:type="xsd:int">2</value2> 

好像Object類型的值是序列化不同,「記住「對象的真實類型是什麼。爲什麼它不能爲像List(Of T)這樣的更復雜類型做同樣的事情?

你能想到任何簡單的解決方法嗎?任何關於XML序列化的提示也可以幫助我:-)

回答

1

它可以爲存儲在對象中的int值做到這一點,因爲它知道如何序列化int。它不知道如何序列化你的複雜類型。

除非您使用[XmlInclude] attribute來告訴它哪些類型可能出現在該對象中。從這個例子:

[WebMethod()] 
    [XmlInclude(typeof(Car)), XmlInclude(typeof(Bike))] 
    public Vehicle Vehicle(string licenseNumber) { 
     if (licenseNumber == "0") { 
     Vehicle v = new Car(); 
     v.licenseNumber = licenseNumber; 
     return v; 
     } 
     else if (licenseNumber == "1") { 
      Vehicle v = new Bike(); 
      v.licenseNumber = licenseNumber; 
      return v; 
     } 
     else { 
     return null; 
     } 
    } 

其中

[XmlRoot("NewVehicle")] 
public abstract class Vehicle { 
    public string licenseNumber; 
    public DateTime make; 
} 

public class Car : Vehicle { 
} 

public class Bike : Vehicle { 
} 
+0

我說我的序列化類XmlInclude屬性和現在的工作。非常感謝!! – 2009-07-17 15:18:19