用户设置Object的XML序列化

时间:2009-07-17 13:43:18

标签: .net vb.net serialization xml-serialization settings

我正在尝试将自定义对象保存为VB.net应用中的用户设置。该对象由List(Of Pair(Of String,Object))组成。 Pair是一个自定义类,它有两个读/写属性(String和Object)。

如果我将int,string,datetime等简单类型作为我的对的第二个值,则保存设置没有任何问题。但是如果我尝试放一些更复杂的东西,比如列表,那么在序列化过程中似乎存在问题,我的设置也没有保存。

我的对中的字符串值按如下方式序列化:

<value1>Priority_1</value1>

使用特殊属性序列化对象值:

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

似乎Object类型的值被不同地序列化,以“记住”对象的真实类型。为什么不能对List(Of T)等更复杂的类型做同样的事情?

您能想到任何简单的解决方法吗?任何可能对我有帮助的XML序列化的提示也欢迎: - )

1 个答案:

答案 0 :(得分: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 {
}