/// <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); }
/// <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); }