Konstantin Koch cb01231e7d implemented Intermediate.Serializer namespace in Content Pipeline.
removed the old .tfignore file.
2015-03-29 18:16:03 +02:00

46 lines
1.5 KiB
C#

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