System.Runtime.Serialization.Formatters.Soap.ReadObjectInfo.PopulateObjectMembers C# (CSharp) Method

PopulateObjectMembers() private method

private PopulateObjectMembers ( ) : void
return void
        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;
            }
        }