public virtual Dictionary<string, MemberMetadata> GetFieldsToSerialize(Type type)
{
Argument.IsNotNull("type", type);
return _fieldsToSerializeCache.GetFromCacheOrFetch(type, () =>
{
var serializableMembers = new Dictionary<string, MemberMetadata>();
var fields = GetFields(type);
foreach (var typeField in fields)
{
var memberMetadata = typeField.Value;
var fieldInfo = (FieldInfo)memberMetadata.Tag;
// Exclude fields by default
var include = false;
if (AttributeHelper.IsDecoratedWithAttribute<IncludeInSerializationAttribute>(fieldInfo))
{
include = true;
}
if (AttributeHelper.IsDecoratedWithAttribute<ExcludeFromSerializationAttribute>(fieldInfo))
{
include = false;
}
if (include)
{
serializableMembers.Add(typeField.Key, memberMetadata);
}
}
return serializableMembers;
});
}