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; }
internal static AnnotationModel LoadAnnotationFromXml(XmlNode annotation, IEnumerable<NodeModel> nodes, IEnumerable<NoteModel> notes) { var instance = new AnnotationModel(nodes,notes); instance.Deserialize(annotation as XmlElement, SaveContext.File); return instance; }