public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var obj = JObject.Load(reader);
var title = obj["Title"].Value<string>();
var guid = Guid.Parse(obj["Uuid"].Value<string>());
// This is a collection of string Guids, which
// should be accessible in the ReferenceResolver.
var models = obj["SelectedModels"].Values<JValue>();
var existing = models.Select(m => serializer.ReferenceResolver.ResolveReference(serializer.Context, m.Value<string>()));
var nodes = existing.Where(m => typeof(NodeModel).IsAssignableFrom(m.GetType())).Cast<NodeModel>();
var notes = existing.Where(m => typeof(NoteModel).IsAssignableFrom(m.GetType())).Cast<NoteModel>();
var anno = new AnnotationModel(nodes, notes);
anno.AnnotationText = title;
anno.GUID = guid;
return anno;
}