[C#] wie JSON in IEnumerable <BaseType> mit Newtonsoft JSON.NET deserialisiert wird


Answers

Verwenden Sie das folgende JsonSerializerSettings-Konstrukt beim Deserialisieren:

new JsonSerializerSettings()
{
    TypeNameHandling = TypeNameHandling.Objects
})
Question

JSON gegeben:

[
  {
    "$id": "1",
    "$type": "MyAssembly.ClassA, MyAssembly",
    "Email": "me@here.com",
  },
  {
    "$id": "2",
    "$type": "MyAssembly.ClassB, MyAssembly",
    "Email": "me@here.com",
  }
]

und diese Klassen:

public abstract class BaseClass
{
    public string Email;
}
public class ClassA : BaseClass
{
}
public class ClassB : BaseClass
{
}

Wie kann ich das JSON in Folgendes deserialisieren:

IEnumerable<BaseClass> deserialized;

Ich kann JsonConvert.Deserialize<IEnumerable<BaseClass>>() da es beschwert, dass BaseClass abstrakt ist.




Sie könnten das Enumerable auch in eine Klasse einfügen:

class Wrapper
{
    IEnumerable<BaseClass> classes;
}

dann serialisieren und deserialisieren.