목록 및 사전을 비롯한 다양한 유형의 속성이 많은 BaseClass라는 클래스가 있습니다. 이 클래스에는 속성이 몇 개 더있는 3 개의 파생 클래스가 있습니다. 이 클래스는 큰 응용 프로그램에서 이미 사용되고 있으므로 디자인 변경은 현재로서는 불가능합니다.기본 개체에서 개체의 속성 값을 채우는 방법
그래서 파생 클래스 등이있다 : 나는 기본 클래스에있는 속성을 기반으로 이러한 클래스를 탈 직렬화 할 때
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로 deserialize 될 때마다 속성 값을 확인하고 올바른 concrete 클래스를 만들어야합니다.
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 문자열에서 데이터가없는 이렇게하려면 나는 그래서 나는이 방법으로 호출 할 수 있습니다 PopulateFrom (이 BaseClass로 인스턴스 BaseClass로 fromObject) 등의 방법이 필요합니다. 그들이하는 일은 동일한 데이터를 얻지 만 다른 작업을 수행하거나 다른 방식으로 표현하기 때문에 Json을 BaseClass로 deserialize해야합니다.
StackTrace.Text에는 유사한 방법이 있지만 그 방법은 무료가 아닌 버전 4로 추가되었습니다.
JSON을 'BaseClass'로 직렬화 해제하면 파생 클래스의 속성에 대한 일련 값이 무시됩니다. 어떤 클래스인지 파악한 후에 올바른 클래스로 다시 deserialize해야합니다. –
죄송합니다. 문제를 제대로 언급하지 않았을 수 있습니다. 파생 클래스는 Json 문자열에 데이터가 없습니다. 그들이하는 일은 동일한 데이터를 얻지 만 다른 작업을 수행하거나 다른 방식으로 표현하는 것입니다. – Aref