您提到您無法輕易從基本類型轉換爲派生類型。這是爲什麼?我能夠這樣做。我的狗實體有一個動物基類型中不存在的屬性(DogYears),但我仍然可以將狗反序列化爲動物,然後投射並顯示DogYears。
public class Dog : Animal
{
public int DogYears { get; set; } // This doesn't exist in the base class
public Dog()
{
this.DogYears = 4;
}
}
在這裏,我們序列狗的基本類型,然後反序列化作爲基本類型,然而我們仍然可以顯示特定的狗屬性:
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」 。
爲了完整起見,這裏是動物類:
[KnownType(typeof(Dog))]
public abstract class Animal
{
// Properties here
}
我不認爲你必須將它反序列化爲具體類型。難道你不能將它反序列化爲基本類型,然後將它用作具體類型(將其轉換爲你需要的地方)? –
@BobHorn我可以很容易地從派生類型轉換爲基類型,但是我不能輕易地從基類型轉換爲派生類型(派生類型通常具有更多的功能,然後是基類型)。關於此主題的其他內容也是這樣的:http:/ /stackoverflow.com/a/124347/1387186 – Wjdavis5
當您轉換爲基本類型時,不會丟失信息。它仍然在那裏。你只是*使用它作爲基礎類型。如果轉換爲派生類型,則可以訪問派生屬性。 –