简体   繁体   中英

Deserialize JSON to C# collection

I am using Newtonsoft.Json to serialize/deserialize my C# object to/from JSON. My C# object has a property of following type:

List<BaseClass> objects { get; set; }

This collection holds different child objects (eg - ChildClass1, ChildClass2).

Serializing to JSON works fine but while deserializing it creates objects of BaseClass in collection (which is obvious :)).

Is there a way I can create concrete child objects while deserializing? I tried creating a custom converter by implementing CustomCreationConverter<BaseClass> . But the problem is overridden Create method gives me just the type and based on that I cannot decide which object to return (ChildClass1 or ChildClass2)

My JSON string has a Type property by which I can identify the child object to create.

Any help is highly appreciated.

You can use the TypeNameHandling option:

var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }

JsonConvert.SerializeObject(myObject, Formatting.Indented, settings );

The TypeNameHandling option "Auto" ensures that type names are included in the serialized JSON for subclasses. But watch out: these names become invalid when the classes or their namespaces are renamed!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM