【发布时间】:2014-02-07 18:49:02
【问题描述】:
我有一个名为 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(this BaseClass instance, 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 字符串中没有数据。他们所做的是获得相同的数据,但对它们执行不同的操作,或者以不同的方式表示它们。
标签: c# properties populate