Exemplo n.º 1
0
        /// <summary>
        /// Deserialises the specified value node into the specified object
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        internal bool Populate(object obj, ValueNode node)
        {
            // Check the value node
            if (obj == null)
            {
                return(false);
            }
            if (node == null)
            {
                return(true);
            }

            // Check for type overrides
            Type type = obj.GetType();

            type = GetTypeOverride(type, node.TypeName);

            // Find translator
            IModelTranslator translator = FindTranslator(type, TranslateCapability.CanDeserialise);

            if (translator == null)
            {
                return(false);
            }

            // Deserialise
            translator.Deserialise(obj, node);
            return(true);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Deserialises the specified value node into a certain type
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        internal bool Deserialise(Type type, ValueNode node, out object obj)
        {
            // Check the value node
            if (node == null)
            {
                if (type.IsValueType)
                {
                    obj = Activator.CreateInstance(type);
                }
                else
                {
                    obj = null;
                }
                return(true);
            }

            // Check for type overrides
            type = GetTypeOverride(type, node.TypeName);

            // Find default
            if (type == null)
            {
                if ((type = GetDefaultType(node)) == null)
                {
                    throw new Exception($"No default type found for {node}");
                }
            }

            // Find translator
            IModelTranslator translator = FindTranslator(type, TranslateCapability.CanDeserialise);

            if (translator == null)
            {
                if (type.IsValueType)
                {
                    obj = Activator.CreateInstance(type);
                }
                else
                {
                    obj = null;
                }
                return(false);
            }

            // Deserialise
            obj = translator.Deserialise(type, node);
            return(true);
        }