/// <summary> /// Writes a member. /// </summary> /// <param name="objectContext"></param> /// <param name="member">The member.</param> protected virtual void WriteMember(ref ObjectContext objectContext, IMemberDescriptor member) { // Filter members by mask if ((member.Mask & objectContext.SerializerContext.MemberMask) == 0) { return; } // Skip any member that we won't serialize if (!member.ShouldSerialize(objectContext.Instance)) { return; } // Emit the key name WriteMemberName(ref objectContext, member, member.Name); var memberValue = member.Get(objectContext.Instance); var memberType = member.Type; // In case of serializing a property/field which is not writeable // we need to change the expected type to the actual type of the // content value if (member.SerializeMemberMode == SerializeMemberMode.Content && !member.HasSet) { if (memberValue != null) { memberType = memberValue.GetType(); } } // Write the member value WriteMemberValue(ref objectContext, member, memberValue, memberType); }