Cui*_*崔鹏飞 4 wcf serialization datacontract datacontractserializer
使用DataContractSerializer序列化子类实例的实际方法是什么?
例如,以下是数据类型:
[DataContract]
public class Car
{
public Car()
{
Wheels = new Collection<Wheel>();
}
[DataMember]
public Collection<Wheel> Wheels { get; set; }
}
[DataContract]
public abstract class Wheel
{
[DataMember]
public string Name { get; set; }
}
[DataContract]
public class MichelinWheel : Wheel
{
[DataMember]
public string Wheel1Test { get; set; }
}
[DataContract]
public class BridgeStoneWheel : Wheel
{
[DataMember]
public string Wheel2Test { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是创建带有两个不同车轮的汽车的代码:
Car car = new Car();
MichelinWheel w1 = new MichelinWheel { Name = "o1", Wheel1Test = "o1 test" };
BridgeStoneWheel w2 = new BridgeStoneWheel { Name = "o2", Wheel2Test = "o2 test" };
car.Wheels.Add(w1);
car.Wheels.Add(w2);
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试通过使用DataContractSerializer来序列化汽车,我将得到一个异常,提示不要期望MichelinWheel。而且我必须像这样修改Wheel类以使其工作:
[DataContract]
[KnownType(typeof(MichelinWheel))]
[KnownType(typeof(BridgeStoneWheel))]
public abstract class Wheel
{
[DataMember]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是这种方法不切实际,因为在创建它们之前,我无法列出所有类型的轮子。而且,在创建新品牌的车轮之后每次更改Wheel类也是不切实际的,因为它们可能是由第三方代码创建的。
那么,使用DataContractSerializer时序列化子类实例的实际方法是什么?
谢谢