我正在尝试将自定义对象保存为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序列化的提示也欢迎: - )
答案 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 {
}