protected virtual void AddMember(MemberInfo memberInfo, TypeSerializerCache cache, SerializerOptions options)
{
SerializationMemberInfo localSerializationMemberInfo;
if (this.MemberBound && this.serializationMemberInfo.IncludeIfUnattributed)
{
bool ok;
var fieldInfo = memberInfo as FieldInfo;
var propertyInfo = memberInfo as PropertyInfo;
if (fieldInfo != null && fieldInfo.IsPublic)
{
ok = true;
}
else if (propertyInfo != null &&
propertyInfo.CanRead && propertyInfo.CanWrite &&
propertyInfo.GetSetMethod().IsPublic &&
propertyInfo.GetGetMethod().IsPublic)
{
ok = true;
}
else
{
ok = false;
}
if (ok)
{
localSerializationMemberInfo = new SerializationMemberInfo(memberInfo, options, cache, true);
elementMembersMap[localSerializationMemberInfo.SerializedName] = localSerializationMemberInfo;
return;
}
}
localSerializationMemberInfo = new SerializationMemberInfo(memberInfo, options, cache);
if (localSerializationMemberInfo.SerializedNodeType == XmlNodeType.Element)
{
if (localSerializationMemberInfo.Namespace.Length > 0)
{
elementMembersMap[localSerializationMemberInfo.Namespace + (char)0xff + localSerializationMemberInfo.SerializedName] = localSerializationMemberInfo;
}
else
{
elementMembersMap[localSerializationMemberInfo.SerializedName] = localSerializationMemberInfo;
}
return;
}
else if (localSerializationMemberInfo.SerializedNodeType == XmlNodeType.Attribute)
{
if (localSerializationMemberInfo.Namespace.Length > 0)
{
attributeMembersMap[localSerializationMemberInfo.Namespace + (char)0xff + localSerializationMemberInfo.SerializedName] = localSerializationMemberInfo;
}
else
{
attributeMembersMap[localSerializationMemberInfo.SerializedName] = localSerializationMemberInfo;
}
}
else if (localSerializationMemberInfo.SerializedNodeType == XmlNodeType.Text)
{
if (TextMember != null && !TextMember.Equals(localSerializationMemberInfo))
{
throw new Exception(string.Format("There should only be one XmlTextAttribute in type {0}", ((Type)this.serializationMemberInfo.MemberInfo).FullName));
}
TextMember = localSerializationMemberInfo;
}
}