using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; namespace ANX.Framework.Content.Pipeline.Serialization.Intermediate { class ReflectiveSerializerFieldHelper : ReflectiveSerializerMemberHelper { FieldInfo fieldInfo; IntermediateSerializer serializer; public ReflectiveSerializerFieldHelper(IntermediateSerializer serializer, FieldInfo fieldInfo) : base(serializer, fieldInfo, fieldInfo.FieldType) { this.serializer = serializer; this.fieldInfo = fieldInfo; } public override object GetValue(object instance) { return fieldInfo.GetValue(instance); } public override void SetValue(object instance, object value) { fieldInfo.SetValue(instance, value); } public override bool CanSetValue() { return !this.fieldInfo.IsInitOnly && !fieldInfo.IsLiteral; } public override bool ShouldSerialize(Type declaringType) { return !fieldInfo.IsDefined(typeof(ContentSerializerIgnoreAttribute), false) && (fieldInfo.IsPublic || Attribute.GetCustomAttribute(fieldInfo, typeof(ContentSerializerAttribute)) != null) && (CanSetValue() || serializer.GetTypeSerializer(fieldInfo.FieldType).CanDeserializeIntoExistingObject) && (!declaringType.IsValueType || !IsSharedResource(fieldInfo)); } } }