public void Deserialize(XObject source, IMemberContext target, IAdviceRequester adviceRequester) { if (source == null) return; if (source.NodeType != XmlNodeType.Element) throw new ArgumentException("Parameter must be an XML element.", "source"); if (_log.IsDebugEnabled) _log.Debug("Deserializing " + source.ToFriendlyName() + " into " + target + "."); var elem = (XElement)source; Type targetType = _typeConverter.GetActualType(source, target, adviceRequester); if (targetType == null) throw new ArgumentException("Unable to get target type for target '" + target + "'."); IObjectContext targetObject = _objectContextFactory.CreateForDeserialization(target, targetType, adviceRequester); if (targetObject == null) throw new ArgumentException("Unable to create target object for target '" + target + "'."); target.SetValue(targetObject); List<IMapping<XObject, IMemberContext>> mappings = _mapper.MapForDeserialization(elem, target, adviceRequester) .ToList(); if (mappings == null) throw new ArgumentException("Unable to map source '" + source + "' and target '" + target + "'."); DeserializeRecursively(mappings, adviceRequester); target.CommitChanges(); }
public void Deserialize(XObject source, IMemberContext target, IAdviceRequester adviceRequester) { if (source == null) return; IObjectContext targetObject; switch (source.NodeType) { case XmlNodeType.Element: targetObject = DeserializeFromElement((XElement)source, _type); break; case XmlNodeType.Attribute: targetObject = DeserializeFromAttribute((XAttribute)source, _type); break; default: throw new ArgumentOutOfRangeException("source", "Unable to deserialize source of type '" + source.NodeType + "'."); } target.SetValue(targetObject); target.CommitChanges(); }