private void InitializeFields()
{
this.FieldMembers = new List<DataMemberAttribute>();
this.Fields = new List<FieldInfo>();
var fields = this.hasCustomContract ?
this.type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) :
this.type.GetFields(BindingFlags.Instance | BindingFlags.Public);
var tuples = from f in fields
let attr = f.GetCustomAttributes(false)
let member = attr.OfType<DataMemberAttribute>().FirstOrDefault()
where !f.IsLiteral && attr.OfType<IgnoreDataMemberAttribute>().Count() == 0
select new
{
Info = f,
Member = member
};
foreach (var tuple in tuples.Where(t => !this.hasCustomContract || t.Member != null))
{
DataMemberAttribute member = tuple.Member != null ?
tuple.Member :
new DataMemberAttribute()
{
EmitDefaultValue = true,
IsRequired = false
};
member.Name = !string.IsNullOrEmpty(member.Name) ? member.Name : tuple.Info.Name;
this.FieldMembers.Add(member);
this.Fields.Add(tuple.Info);
}
}