예제 #1
0
        private void WriteComponent(XPathResult result, object value, IDictionaryAdapter dictionaryAdapter)
        {
            if (result.Property != null)
            {
                dictionaryAdapter.This.ExtendedProperties.Remove(result.Property.PropertyName);
            }

            if (value == null)
            {
                result.Remove();
                return;
            }

            var source = value as IDictionaryAdapter;

            if (source != null)
            {
                var node = result.RemoveChildren();
                if (result.Type != source.Meta.Type && result.OmitPolymorphism == false)
                {
                    var xmlType = source.GetXmlMeta().XmlType;
                    Context.SetXmlType(xmlType.TypeName, xmlType.Namespace, node);
                }
                var element = (IDictionaryAdapter)ReadComponent(result, false, dictionaryAdapter);
                source.CopyTo(element);
            }
        }
예제 #2
0
        private void WriteComponent(XPathResult result, ref object value, IDictionaryAdapter dictionaryAdapter)
        {
            var source = value as IDictionaryAdapter;

            if (source != null)
            {
                var sourceAdapter = For(source);
                if (sourceAdapter != null)
                {
                    var sourceRoot = sourceAdapter.Root;
                    var resultNode = result.GetNavigator(false);
                    if (sourceRoot != null && resultNode != null && sourceRoot.IsSamePosition(resultNode))
                    {
                        return;
                    }
                }

                var node = result.RemoveChildren();
                if (result.Type != source.Meta.Type && result.OmitPolymorphism == false)
                {
                    var xmlType = source.GetXmlMeta().XmlType;
                    var context = GetEffectiveContext(dictionaryAdapter);
                    context.SetXmlType(xmlType.TypeName, xmlType.Namespace, node);
                }

                var element = (IDictionaryAdapter)ReadComponent(result, false, dictionaryAdapter);
                source.CopyTo(element);
                value = element;
            }
        }
예제 #3
0
        private void WriteComponent(XPathResult result, ref object value, IDictionaryAdapter dictionaryAdapter)
        {
            var source = value as IDictionaryAdapter;

            if (source != null)
            {
                var node = result.RemoveChildren();
                if (result.Type != source.Meta.Type && result.OmitPolymorphism == false)
                {
                    var xmlType = source.GetXmlMeta().XmlType;
                    Context.SetXmlType(xmlType.TypeName, xmlType.Namespace, node);
                }
                var element = (IDictionaryAdapter)ReadComponent(result, false, dictionaryAdapter);
                source.CopyTo(element);
                value = element;
            }
        }