{
"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.
}
}
Wenn ich Class1 zu deserialisieren versuche, kann ich nicht herausfinden, wie man die Liste der abgeleiteten Klassen von Name erstellt. Ich kann nicht so etwas wie List BaseClass deklarieren, wo BaseClass abstrakt ist, und ich bin nicht sicher, wie Reflektion während der Deserialisierung in Class2 zu verwenden, um die abgeleitete Klasse aus dem "Name" -Wert zu bestimmen. Ich habe mich auch mit ICloneable beschäftigt, kam aber in diesem Zusammenhang nicht weiter.Deserialisieren von JSON in abgeleitete Klassen
Edit:
Hier ist, was ich am Ende zu schaffen und fordern von bekommen und setzen
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;
}
Können Sie Code bereitstellen, den Sie während der Deserialisierung versucht haben? – ragerory
Was versuchen Sie zu erreichen, was ist das erwartete Ergebnis der Deserialisierung des von Ihnen bereitgestellten JSON? – ironstone13
Ich habe einen Basiscode hinzugefügt, den ich ausprobiert habe, der nicht funktioniert, aber hoffentlich zeigt, was ich versuche zu tun. – user2680142