internal ObjectHolder(
object obj, long objID, SerializationInfo info, ISerializationSurrogate surrogate,
long idOfContainingObj, FieldInfo field, int[] arrayIndex)
{
Debug.Assert(objID >= 0, "objID>=0");
_object = obj; //May be null;
_id = objID;
_flags = 0;
_missingElementsRemaining = 0;
_missingDecendents = 0;
_dependentObjects = null;
_next = null;
_serInfo = info;
_surrogate = surrogate;
_markForFixupWhenAvailable = false;
if (obj is TypeLoadExceptionHolder)
{
_typeLoad = (TypeLoadExceptionHolder)obj;
}
if (idOfContainingObj != 0 && ((field != null && field.FieldType.IsValueType) || arrayIndex != null))
{
if (idOfContainingObj == objID)
{
throw new SerializationException(SR.Serialization_ParentChildIdentical);
}
_valueFixup = new ValueTypeFixupInfo(idOfContainingObj, field, arrayIndex);
}
SetFlags();
}