示例#1
0
        private bool TryApplyBehavior <TBehavior, TAccessor>(string key, PropertyDescriptor property, object behavior,
                                                             ref XmlAccessor accessor, XmlAccessorFactory <TAccessor> factory)
            where TBehavior : class
            where TAccessor : XmlAccessor, IConfigurable <TBehavior>
        {
            var typedBehavior = behavior as TBehavior;

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

            if (accessor == null)
            {
                accessor = CreateAccessor(key, property, factory);
            }

            var typedAccessor = accessor as TAccessor;

            if (typedAccessor == null)
            {
                throw Error.AttributeConflict(key);
            }

            typedAccessor.Configure(typedBehavior);
            return(true);
        }
示例#2
0
        public void Configure(XPathAttribute attribute)
        {
            if (path != null)
            {
                throw Error.AttributeConflict(path.Path.Expression);
            }

            path = attribute.SetPath;

            if (path == attribute.GetPath)
            {
                return;
            }
            else if (Serializer.CanGetStub)
            {
                throw Error.SeparateGetterSetterOnComplexType(path.Path.Expression);
            }

            defaultAccessor = new DefaultAccessor(this, attribute.GetPath);
        }
示例#3
0
 public static void SetAccessor(this PropertyDescriptor property, XmlAccessor accessor)
 {
     property.ExtendedProperties[XmlAccessorKey] = accessor;
 }
示例#4
0
 public override IXmlCollectionAccessor GetCollectionAccessor(Type itemType)
 {
     return(itemAccessor ?? (itemAccessor = new ItemAccessor(this)));
 }
示例#5
0
 private bool TryApplyBehavior(string key, PropertyDescriptor property, object behavior, ref XmlAccessor accessor)
 {
     return
         (TryApplyBehavior <XmlElementAttribute, XmlElementBehaviorAccessor>
              (key, property, behavior, ref accessor, XmlElementBehaviorAccessor.Factory)
          ||
          TryApplyBehavior <XmlArrayAttribute, XmlArrayBehaviorAccessor>
              (key, property, behavior, ref accessor, XmlArrayBehaviorAccessor.Factory)
          ||
          TryApplyBehavior <XmlArrayItemAttribute, XmlArrayBehaviorAccessor>
              (key, property, behavior, ref accessor, XmlArrayBehaviorAccessor.Factory)
          ||
          TryApplyBehavior <XmlAttributeAttribute, XmlAttributeBehaviorAccessor>
              (key, property, behavior, ref accessor, XmlAttributeBehaviorAccessor.Factory)
          ||
          TryApplyBehavior <XPathAttribute, XPathBehaviorAccessor>
              (key, property, behavior, ref accessor, XPathBehaviorAccessor.Factory)
          ||
          TryApplyBehavior <XPathVariableAttribute, XPathBehaviorAccessor>
              (key, property, behavior, ref accessor, XPathBehaviorAccessor.Factory)
          ||
          TryApplyBehavior <XPathFunctionAttribute, XPathBehaviorAccessor>
              (key, property, behavior, ref accessor, XPathBehaviorAccessor.Factory)
         );
 }
示例#6
0
        private bool TryGetAccessor(string key, PropertyDescriptor property, bool requireVolatile, out XmlAccessor accessor)
        {
            accessor = property.HasAccessor()
                                ? property.GetAccessor()
                                : CreateAccessor(key, property);

            if (accessor.IsIgnored)
            {
                return(Try.Failure(out accessor));
            }
            if (requireVolatile && !accessor.IsVolatile)
            {
                return(Try.Failure(out accessor));
            }
            return(true);
        }