Using Json.NET converters to deserialize properties

.net, json.net, serialization

Solution

One of the things you can do with Json.NET is:

var settings = new JsonSerializerSettings();
settings.TypeNameHandling = TypeNameHandling.Objects;

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

The `TypeNameHandling` flag will add a `$type` property to the JSON, which allows Json.NET to know which concrete type it needs to deserialize the object into. This allows you to deserialize an object while still fulfilling an interface or abstract base class.

The downside, however, is that this is very Json.NET-specific. The `$type` will be a fully-qualified type, so if you're serializing it with type info,, the deserializer needs to be able to understand it as well.

Documentation: Serialization Settings with Json.NET

Problem

I have a class definition that contains a property that returns an interface. ``` public class Foo { public int Number { get; set; } public ISomething Thing { get; set; } } ``` Attempting to serialize the Foo class using Json.NET gives me an error message like, "Could not create an instance of type 'ISomething'. ISomething may be an interface or abstract class." Is there a Json.NET attribute or converter that would let me specify a concrete `Something` class to use during deserialization?

Original source

Related problems