private ValueModel DeserializeWithMetadata(JToken token) { JObject obj = token as JObject; ValueModel model = DeserializeWithoutMetadata(obj[ValueModelSerializer.VALUE_MODEL_DATA_NAME]); if (obj.TryGetValue(ValueModelSerializer.VALUE_MODEL_GUID_NAME, out JToken guid)) // TODO: Create some sort of more extensible metadata serialization handler { model.Guid = guid.ToObject <Guid>(); } if (obj.TryGetValue(ValueModelSerializer.VALUE_MODEL_TYPE_NAME, out JToken type)) { model.MakeExplicit(type.ToString()); } return(model); }
public ValueModel Disassemble(object obj, Type expectedType, DisassemblyContext context) { List <ValueModel> models = new List <ValueModel>(); IEnumerable enumerable = obj as IEnumerable; if (obj != null) { foreach (object element in enumerable) { ValueModel model = _elementAssembler.Disassemble(element, element.GetType(), context); if (element.GetType() != GetElementType(obj.GetType())) { model.MakeExplicit(element.GetType()); } models.Add(model); } } var modelsArray = models.ToArray(); return(context.MakeReferencable(modelsArray, new ArrayModel(modelsArray))); }