2009-07-17 5 views
0

VB.netアプリケーションでユーザー設定としてカスタムオブジェクトを保存しようとしています。このオブジェクトは、List(Of Pair(Of String、Object))で構成されます。ペアは、2つの読み取り/書き込みプロパティ(StringとObject)を持つカスタムクラスです。ユーザー設定オブジェクトのXMLシリアル化

int、string、datetimeのような単純な型を私のペアの2番目の値として入れると、設定は問題なく保存されます。しかし、リストのようにもっと複雑なものを置こうとすると、直列化中に問題が発生してしまい、設定が保存されません。私のペアで

文字列値は、次のようにシリアライズされています

<value1>Priority_1</value1> 

オブジェクトの値は、特別な属性を持つ直列化される:Object型の値を「覚えておくことは、異なったシリアル化されるように

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

らしいです"オブジェクトの実際のタイプは何ですか?なぜList(Of T)のようなもっと複雑な型でも同じことをすることができないのですか?

簡単な回避策はありますか?

答えて

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が私のシリアル化されたクラスの属性とそれが動作するようになりました。どうもありがとう!! –