given this JSON:
[ { "$id": "1", "$type": "MyAssembly.ClassA, MyAssembly", "Email": "[email protected]", }, { "$id": "2", "$type": "MyAssembly.ClassB, MyAssembly", "Email": "[email protected]", } ]
and these classes:
public abstract class BaseClass { public string Email; } public class ClassA : BaseClass { } public class ClassB : BaseClass { }
How can I deserialize the JSON into:
IEnumerable<BaseClass> deserialized;
I can't use JsonConvert.Deserialize<IEnumerable<BaseClass>>()
because it complains that BaseClass
is abstract.
You need:
JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; string strJson = JsonConvert.SerializeObject(instance, settings);
So the JSON looks like this:
{ "$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib", "$values": [ { "$id": "1", "$type": "MyAssembly.ClassA, MyAssembly", "Email": "[email protected]", }, { "$id": "2", "$type": "MyAssembly.ClassB, MyAssembly", "Email": "[email protected]", } ] }
Then you can deserialize it:
BaseClass obj = JsonConvert.DeserializeObject<BaseClass>(strJson, settings);
Documentation: TypeNameHandling setting
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With