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 IDeserializer Select(XObject source, IMemberContext target, IAdviceRequester adviceRequester) { Type actualType = _typeConverter.GetActualType(source, target, adviceRequester); if (actualType == null) return null; if (_log.IsDebugEnabled) _log.Debug("Selected collection deserialization for source '" + source.ToFriendlyName() + "' and target '" + target + "'."); return _deserializer; }