internal void Fixup(ParseRecord record, ParseRecord parent) { object obj = record._newObj; switch (_valueFixupEnum) { case ValueFixupEnum.Array: _arrayObj.SetValue(obj, _indexMap); break; case ValueFixupEnum.Header: throw new PlatformNotSupportedException(); case ValueFixupEnum.Member: if (_objectInfo._isSi) { _objectInfo._objectManager.RecordDelayedFixup(parent._objectId, _memberName, record._objectId); } else { MemberInfo memberInfo = _objectInfo.GetMemberInfo(_memberName); if (memberInfo != null) { _objectInfo._objectManager.RecordFixup(parent._objectId, memberInfo, record._objectId); } } break; } }
internal void Fixup(ParseRecord record, ParseRecord parent) { Object obj = record.PRnewObj; #if _DEBUG SerTrace.Log(this, "Fixup ", obj, " ", ((Enum)valueFixupEnum).ToString()); #endif switch (valueFixupEnum) { case ValueFixupEnum.Array: arrayObj.SetValue(obj, indexMap); break; case ValueFixupEnum.Header: Type type = typeof(Header); if (valueInfo == null) { MemberInfo[] valueInfos = type.GetMember("Value"); if (valueInfos.Length != 1) { throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_HeaderReflection"), valueInfos.Length)); } valueInfo = valueInfos[0]; } FormatterServices.SerializationSetValue(valueInfo, header, obj); break; case ValueFixupEnum.Member: SerTrace.Log(this, "Fixup Member new object value ", obj, " memberObject ", memberObject); if (objectInfo.isSi) { SerTrace.Log(this, "Recording a fixup on member: ", memberName, " in object id", parent.PRobjectId, " Required Object ", record.PRobjectId); objectInfo.objectManager.RecordDelayedFixup(parent.PRobjectId, memberName, record.PRobjectId); // Console.WriteLine("SerializationInfo: Main Object ({0}): {1}. SubObject ({2}): {3}", parent.PRobjectId, // objectInfo.obj, record.PRobjectId, obj); } else { MemberInfo memberInfo = objectInfo.GetMemberInfo(memberName); SerTrace.Log(this, "Recording a fixup on member:", memberInfo, " in object id ", parent.PRobjectId, " Required Object", record.PRobjectId); if (memberInfo != null) { objectInfo.objectManager.RecordFixup(parent.PRobjectId, memberInfo, record.PRobjectId); } // Console.WriteLine("MemberFixup: Main Object({0}): {1}. SubObject({2}): {3}", parent.PRobjectId, // objectInfo.obj.GetType(), record.PRobjectId, obj.GetType()); } break; } }
internal void Fixup(ParseRecord record, ParseRecord parent) { object obj = record._newObj; switch (_valueFixupEnum) { case ValueFixupEnum.Array: _arrayObj.SetValue(obj, _indexMap); break; case ValueFixupEnum.Header: Type type = typeof(Header); if (_valueInfo == null) { MemberInfo[] valueInfos = type.GetMember("Value"); if (valueInfos.Length != 1) { throw new SerializationException(SR.Format(SR.Serialization_HeaderReflection, valueInfos.Length)); } _valueInfo = valueInfos[0]; } FormatterServices.SerializationSetValue(_valueInfo, _header, obj); break; case ValueFixupEnum.Member: if (_objectInfo._isSi) { _objectInfo._objectManager.RecordDelayedFixup(parent._objectId, _memberName, record._objectId); } else { MemberInfo memberInfo = _objectInfo.GetMemberInfo(_memberName); if (memberInfo != null) { _objectInfo._objectManager.RecordFixup(parent._objectId, memberInfo, record._objectId); } } break; } }