У меня есть класс 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