public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var obj = JObject.Load(reader);
var isCustomNode = obj["IsCustomNode"].Value<bool>();
var lastModifiedStr = obj["LastModified"].Value<string>();
var lastModified = DateTime.Parse(lastModifiedStr);
var author = obj["LastModifiedBy"].Value<string>();
var description = obj["Description"].Value<string>();
var guidStr = obj["Uuid"].Value<string>();
var guid = Guid.Parse(guidStr);
var name = obj["Name"].Value<string>();
var elementResolver = obj["ElementResolver"].ToObject<ElementResolver>(serializer);
var nmc = (NodeModelConverter)serializer.Converters.First(c => c is NodeModelConverter);
nmc.ElementResolver = elementResolver;
// nodes
var nodes = obj["Nodes"].ToObject<IEnumerable<NodeModel>>(serializer);
// notes
var notes = obj["Notes"].ToObject<IEnumerable<NoteModel>>(serializer);
if (notes.Any())
{
foreach(var n in notes)
{
serializer.ReferenceResolver.AddReference(serializer.Context, n.GUID.ToString(), n);
}
}
// connectors
// Although connectors are not used in the construction of the workspace
// we need to deserialize this collection, so that they connect to their
// relevant ports.
var connectors = obj["Connectors"].ToObject<IEnumerable<ConnectorModel>>(serializer);
// annotations
var annotations = obj["Annotations"].ToObject<IEnumerable<AnnotationModel>>(serializer);
var info = new WorkspaceInfo(guid.ToString(), name, description, Dynamo.Models.RunType.Automatic);
WorkspaceModel ws;
if (isCustomNode)
{
ws = new CustomNodeWorkspaceModel(factory, nodes, notes, annotations,
Enumerable.Empty<PresetModel>(), elementResolver, info);
}
else
{
ws = new HomeWorkspaceModel(guid, engine, scheduler, factory,
Enumerable.Empty<KeyValuePair<Guid, List<CallSite.RawTraceData>>>(), nodes, notes, annotations,
Enumerable.Empty<PresetModel>(), elementResolver,
info, verboseLogging, isTestMode);
}
return ws;
}