internal void PopulateObjectMembers()
{
InternalST.Soap( this,objectInfoId," ", objectType," PopulateObjectMembers isSi ",isSi);
if (!isSi)
{
MemberInfo[] finalMemberInfos = null;
Object[] finalMemberData = null;
int finalMemberIndex = 0;
if (numberMembersSeen < memberNames.Length) {
finalMemberInfos = new MemberInfo[numberMembersSeen];
finalMemberData = new Object[numberMembersSeen];
for (int iMember = 0; iMember < memberNames.Length; ++iMember) {
if (memberNames[iMember] == null) {
// A field on the type isnt found. See if the field has OptionallySerializable and the type has the deserialization constructor
Object [] attrs = cache.memberInfos[iMember].GetCustomAttributes(typeof(OptionalFieldAttribute), false);
if ((attrs == null || attrs.Length == 0) && (majorVersion >= 1 && minorVersion >= 0) ){
// the member isnt optionally serializable
throw new SerializationException(SoapUtil.GetResourceString("Serialization_WrongNumberOfMembers",
objectType, cache.memberInfos.Length, numberMembersSeen));
}
}
else {
if (memberNames[iMember] != cache.memberInfos[iMember].Name) {
throw new SerializationException(SoapUtil.GetResourceString("Serialization_WrongNumberOfMembers",
objectType, cache.memberInfos.Length, numberMembersSeen));
}
finalMemberInfos[finalMemberIndex] = cache.memberInfos[iMember];
finalMemberData[finalMemberIndex] = memberData[iMember];
finalMemberIndex++;
}
}
}
else {
finalMemberInfos = cache.memberInfos;
finalMemberData = memberData;
}
DumpPopulate(finalMemberInfos, finalMemberData);
FormatterServices.PopulateObjectMembers(obj, finalMemberInfos, finalMemberData);
numberMembersSeen = 0;
}
}