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);
        }
Ejemplo n.º 2
0
        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)));
        }