{
"Class1": {
"Class2": [
{"Name": "DerivedV1"},
{"Name": "DerivedV2"},
{"Name": "DerivedV3"}
]
}
}
JsonConvert.DeserializeObject<Class1>(jsonString, settings);
public class Class1
{
public List<BaseClass> DerivedClasses { get; set; }
}
public abstract BaseClass
{
public string Name { get; set; }
public abstract bool DoSomething;
}
public class DerivedV1 : BaseClass
{
public override bool DoSomething()
{
// Logic here, different for each derived class.
}
}
Class1을 deserialize하려고하면 파생 클래스 목록을 이름에서 분류하는 방법을 알 수 없습니다. ListClassClass와 같은 클래스를 선언 할 수 없습니다. BaseClass는 추상 클래스이며, 클래스 이름을 역 직렬화 중에 리플렉션을 사용하여 "name"값에서 파생 클래스를 결정하는 방법을 모르겠습니다. 나는 또한 ICloneable을 들여다 보았지만이 맥락에서 어디에도 가지 않았다.JSON을 파생 클래스로 비방 화합니다.
편집 :
여기내가 만들고 얻을에서 전화를 끝내었고,
public static List<T> DeserializeJObjectsToObjects<T>(IEnumerable<JObject> jObjects, string typeKey, string nameSpaceOfClass)
{
Assembly assembly = Assembly.GetExecutingAssembly();
List<T> convert = new List<T>();
foreach (var jObject in jObjects)
{
JToken typeName;
jObject.TryGetValue(typeKey, out typeName);
string fullNameSpace = string.Format(namespaceFormat, nameSpaceOfClass, typeName);
Type t = Type.GetType(string.Format(fullNameSpace));
convert.Add((T) Activator.CreateInstance(t));
}
return convert;
}
public static List<JObject> SerializeObjectsToJObjects<T>(IEnumerable<T> variableObjects)
{
List<JObject> convert = new List<JObject>();
foreach (T variableObject in variableObjects)
{
var jsonString = JsonConvert.SerializeObject(variableObject);
convert.Add(JObject.Parse(jsonString));
}
return convert;
}
비 직렬화 중에 시도한 코드를 제공해 주실 수 있습니까? – ragerory
달성하려는 목표는 무엇입니까? 제공 한 JSON을 deserialize 할 때 예상되는 결과는 무엇입니까? – ironstone13
내가 시도한 일부 기본 코드가 추가되었지만 작동하지 않지만 잘하면 무엇을하려고하는지 보여줍니다. – user2680142