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; }
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)); } }
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)); } }
/// <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(); }