您提到您不能轻松地从基类型转换为派生类型。这是为什么?我能够这样做。我的 Dog 实体有一个在 Animal 基本类型中不存在的属性 (DogYears),但我仍然可以将 Dog 反序列化为 Animal,然后将其转换并显示 DogYears。
public class Dog : Animal
{
public int DogYears { get; set; } // This doesn't exist in the base class
public Dog()
{
this.DogYears = 4;
}
}
在这里,我们将 Dog 序列化为基本类型,然后反序列化为基本类型,但我们仍然可以显示特定于狗的属性:
private static void JsonSerialization()
{
Animal dog = new Dog();
var stream = new MemoryStream();
var serializer = new DataContractJsonSerializer(typeof(Animal));
serializer.WriteObject(stream, dog);
stream.Position = 0;
Animal deserializedDog = serializer.ReadObject(stream) as Animal;
Console.WriteLine(((Dog)deserializedDog).DogYears);
}
控制台正确显示“4”。
为了完整起见,这里是 Animal 类:
[KnownType(typeof(Dog))]
public abstract class Animal
{
// Properties here
}