我有一个名为BaseClass的类,它具有各种类型的许多属性,包括列表和字典。这个类有三个派生类,它们有更多的属性。这些类已经在一个大的应用程序中使用,所以现在改变设计是不可行的。如何从其基础对象填充对象的属性值
所以派生类是这样的:
public class DerivedClass1 : BaseClass
{
public string PropertyOne { get; set; }
}
public class DerivedClass2 : BaseClass
{
public string PropertyTwo { get; set; }
}
public class DerivedClass3 : BaseClass
{
public string PropertyThree { get; set; }
}
我需要执行多态基于驻留在基类中的属性,当我反序列化这些类。所以每次将Json对象反序列化为BaseClass时,我都需要检查该属性值并创建正确的具体类。要做到这一点,我需要像PopulateFrom(这BaseClass的情况下,BaseClass的fromObject)的方法,所以我可以这样调用它:
var deserializedObjet = Serializer.Deserialize(jsonString);
switch(deserializedObjet.ConcreteType)
{
case 1:
return new DerivedClass1().PopulateFrom(deserializedObjet);
case 2:
return new DerivedClass2().PopulateFrom(deserializedObjet);
case 3:
return new DerivedClass3().PopulateFrom(deserializedObjet);
}
派生类在JSON字符串的数据。他们所做的是获得相同的数据,但他们对它们执行不同的操作,或者以不同的方式表示它们,所以我只需要将Json反序列化到BaseClass。
我知道StackTrace.Text有一个类似的方法,但该方法是从版本4添加的,这不是免费的。
如果您将JSON反序列化为'BaseClass',那么它将忽略派生类属性的序列化值。一旦你找出它是哪一个,你就需要反序列化到正确的类。 –
对不起,我可能没有正确提到这个问题。派生类在Json字符串中没有数据。他们所做的是获得相同的数据,但他们对它们执行不同的操作,或者以不同的方式表示它们。 – Aref