NewtonSoft.Json clase de serialización y deserialización con propiedad de tipo IEnumerable <ISomeInterface>

Estoy tratando de mover algo de código para consumir ASP.NET MVC Web API generado datos Json en lugar de SOAP Xml.

Me he encontrado con un problema con la serialización y deserialización de las propiedades de tipo:

IEnumerable<ISomeInterface>.

Aquí hay un ejemplo simple:

public interface ISample{
  int SampleId { get; set; }
}
public class Sample : ISample{
  public int SampleId { get; set; }
}
public class SampleGroup{
  public int GroupId { get; set; }
  public IEnumerable<ISample> Samples { get; set; }
 }
}

Puedo serializar instancias de SampleGroup fácilmente con:

var sz = JsonConvert.SerializeObject( sampleGroupInstance );

Sin embargo, la deserialización correspondiente falla:

JsonConvert.DeserializeObject<SampleGroup>( sz );

con este mensaje de excepción:

"No se pudo crear una instancia de tipo JsonSerializationExample.ISample. Type es una interfaz o clase abstracta y no se puede crear una instancia".

Si obtengo un JsonConverter puedo decorar mi propiedad de la siguiente manera:

[JsonConverter( typeof (SamplesJsonConverter) )]
public IEnumerable<ISample> Samples { get; set; }

Aquí está el JsonConverter:

public class SamplesJsonConverter : JsonConverter{
  public override bool CanConvert( Type objectType ){
    return ( objectType == typeof (IEnumerable<ISample>) );
  }

  public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer ){
    var jA = JArray.Load( reader );
    return jA.Select( jl => serializer.Deserialize<Sample>( new JTokenReader( jl ) ) ).Cast<ISample>( ).ToList( );
  }

  public override void WriteJson( JsonWriter writer, object value, JsonSerializer serializer ){
    ... What works here?
  }
}

Este convertidor resuelve el problema de deserialización pero no puedo entender cómo codificar el método WriteJson para que la serialización vuelva a funcionar.

¿Alguien puede ayudar?

¿Es esta una forma "correcta" de resolver el problema en primer lugar?

Respuestas a la pregunta(7)

Su respuesta a la pregunta