private void InitMemberInfo()
{
InternalST.Soap( this,objectInfoId," ", objectType," InitMemberInfo Entry");
cache = (SerObjectInfoCache)serObjectInfoInit.seenBeforeTable[objectType];
if (cache == null)
{
InternalST.Soap( this,objectInfoId," ", objectType," InitMemberInfo new cache");
cache = new SerObjectInfoCache();
int count = 0;
if (!objectType.IsByRef) // byref will only occur for MethodSignature
{
cache.memberInfos = FormatterServices.GetSerializableMembers(objectType, context);
count = cache.memberInfos.Length;
}
cache.memberNames = new String[count];
cache.memberTypes = new Type[count];
cache.memberAttributeInfos = new SoapAttributeInfo[count];
// Calculate new arrays
for (int i=0; i<count; i++)
{
cache.memberNames[i] = cache.memberInfos[i].Name;
cache.memberTypes[i] = GetMemberType(cache.memberInfos[i]);
cache.memberAttributeInfos[i] = Attr.GetMemberAttributeInfo(cache.memberInfos[i], cache.memberNames[i], cache.memberTypes[i]);
InternalST.Soap( this, objectInfoId," InitMemberInfo name ",cache.memberNames[i],", type ",cache.memberTypes[i],", memberInfoType ",cache.memberInfos[i].GetType());
}
cache.fullTypeName = objectType.FullName;
cache.assemblyString = objectType.Module.Assembly.FullName;
serObjectInfoInit.seenBeforeTable.Add(objectType, cache);
}
if (obj != null)
{
memberData = FormatterServices.GetObjectData(obj, cache.memberInfos);
DumpMemberInfo();
}
isTyped = true;
isNamed = true;
InternalST.Soap( this,objectInfoId," ", objectType," InitMemberInfo Exit");
}