コード例 #1
0
        public SynchronizableMember(
            int index,
            ISerializer serializer,
            MemberInfo memberInfo,
            SynchronizeAttribute synchronizeAttribute,
            Func <object, object> getter,
            Action <object, object> setter)
        {
            _getter = getter;
            _setter = setter;

            Index      = index;
            Serializer = serializer;
            MemberInfo = memberInfo;

#pragma warning disable 8509
            MemberType = MemberInfo.MemberType switch
#pragma warning restore 8509
            {
                MemberTypes.Field => ((FieldInfo)MemberInfo).FieldType,
                MemberTypes.Property => ((PropertyInfo)MemberInfo).PropertyType,
            };

            SynchronizeAttribute = synchronizeAttribute;
        }
コード例 #2
0
 private void ResolveFieldAccessors(Type type, List <SynchronizableMember> synchronizableMembers)
 {
     FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
     for (var i = 0; i < fields.Length; i++)
     {
         FieldInfo            fieldInfo            = fields[i];
         SynchronizeAttribute synchronizeAttribute = FindSynchronizeAttribute(fieldInfo);
         if (synchronizeAttribute == null)
         {
             continue;
         }
         Func <object, object>   getter     = ReflectionUtils.CompileFieldGetter(fieldInfo);
         Action <object, object> setter     = ReflectionUtils.CompileFieldSetter(fieldInfo);
         ISerializer             serializer = _serializerCollection.FindSerializerByType(fieldInfo.FieldType);
         synchronizableMembers.Add(new SynchronizableMember(synchronizableMembers.Count, serializer, fieldInfo, synchronizeAttribute, getter, setter));
     }
 }
コード例 #3
0
 private void ResolvePropertyAccessors(Type type, List <SynchronizableMember> synchronizableMembers)
 {
     PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
     for (var i = 0; i < properties.Length; i++)
     {
         PropertyInfo         propertyInfo         = properties[i];
         SynchronizeAttribute synchronizeAttribute = FindSynchronizeAttribute(propertyInfo);
         if (synchronizeAttribute == null)
         {
             continue;
         }
         Func <object, object>   getter     = ReflectionUtils.CompilePropertyGetter(propertyInfo);
         Action <object, object> setter     = ReflectionUtils.CompilePropertySetter(propertyInfo);
         ISerializer             serializer = _serializerCollection.FindSerializerByType(propertyInfo.PropertyType);
         synchronizableMembers.Add(new SynchronizableMember(synchronizableMembers.Count, serializer, propertyInfo, synchronizeAttribute, getter, setter));
     }
 }
コード例 #4
0
        /// <summary> Write a Synchronize XML Element from attributes in a member. </summary>
        public virtual void WriteSynchronize(System.Xml.XmlWriter writer, System.Reflection.MemberInfo member, SynchronizeAttribute attribute, BaseAttribute parentAttribute, System.Type mappedClass)
        {
            writer.WriteStartElement( "synchronize" );
            // Attribute: <table>
            writer.WriteAttributeString("table", attribute.Table==null ? DefaultHelper.Get_Synchronize_Table_DefaultValue(member) : GetAttributeValue(attribute.Table, mappedClass));

            WriteUserDefinedContent(writer, member, null, attribute);

            writer.WriteEndElement();
        }