Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CompleteObject()

void System.Runtime.Serialization.ObjectManager.CompleteObject ( ObjectHolder holder,
bool bObjectFullyComplete )
inlinepackage

Definition at line 281 of file ObjectManager.cs.

282 {
283 FixupHolderList missingElements = holder._missingElements;
284 object member = null;
285 ObjectHolder holder2 = null;
286 int num = 0;
287 if (holder.ObjectValue == null)
288 {
289 throw new SerializationException(System.SR.Format(System.SR.Serialization_MissingObject, holder._id));
290 }
291 if (missingElements == null)
292 {
293 return;
294 }
295 if (holder.HasSurrogate || holder.HasISerializable)
296 {
297 SerializationInfo serInfo = holder._serInfo;
298 if (serInfo == null)
299 {
300 throw new SerializationException(System.SR.Serialization_InvalidFixupDiscovered);
301 }
302 if (missingElements != null)
303 {
304 for (int i = 0; i < missingElements._count; i++)
305 {
306 if (missingElements._values[i] != null && GetCompletionInfo(missingElements._values[i], out holder2, out member, bObjectFullyComplete))
307 {
308 object objectValue = holder2.ObjectValue;
310 {
311 serInfo.UpdateValue((string)member, objectValue, objectValue.GetType());
312 }
313 else
314 {
315 serInfo.UpdateValue((string)member, objectValue, typeof(MarshalByRefObject));
316 }
317 num++;
318 missingElements._values[i] = null;
320 {
321 holder.DecrementFixupsRemaining(this);
322 holder2.RemoveDependency(holder._id);
323 }
324 }
325 }
326 }
327 }
328 else
329 {
330 for (int j = 0; j < missingElements._count; j++)
331 {
332 FixupHolder fixupHolder = missingElements._values[j];
334 {
335 continue;
336 }
337 if (holder2.TypeLoadExceptionReachable)
338 {
339 holder.TypeLoadException = holder2.TypeLoadException;
340 if (holder.Reachable)
341 {
342 throw new SerializationException(System.SR.Format(System.SR.Serialization_TypeLoadFailure, holder.TypeLoadException.TypeName));
343 }
344 }
345 if (holder.Reachable)
346 {
347 holder2.Reachable = true;
348 }
349 switch (fixupHolder._fixupType)
350 {
351 case 1:
352 if (holder.RequiresValueTypeFixup)
353 {
354 throw new SerializationException(System.SR.Serialization_ValueTypeFixup);
355 }
356 ((Array)holder.ObjectValue).SetValue(holder2.ObjectValue, (int[])member);
357 break;
358 case 2:
359 {
362 {
363 if (holder.RequiresValueTypeFixup && holder.ValueTypeFixupPerformed)
364 {
366 {
367 throw new SerializationException(System.SR.Serialization_PartialValueTypeFixup);
368 }
369 }
370 else
371 {
372 FormatterServices.SerializationSetValue(memberInfo, holder.ObjectValue, holder2.ObjectValue);
373 }
374 if (holder2.RequiresValueTypeFixup)
375 {
377 }
378 break;
379 }
380 throw new SerializationException(System.SR.Serialization_UnableToFixup);
381 }
382 default:
383 throw new SerializationException(System.SR.Serialization_UnableToFixup);
384 }
385 num++;
386 missingElements._values[j] = null;
388 {
389 holder.DecrementFixupsRemaining(this);
390 holder2.RemoveDependency(holder._id);
391 }
392 }
393 }
394 _fixupCount -= num;
395 if (missingElements._count == num)
396 {
398 }
399 }
bool GetCompletionInfo(FixupHolder fixup, [NotNullWhen(true)] out ObjectHolder holder, out object member, bool bThrowIfMissing)
bool DoValueTypeFixup(FieldInfo memberToFix, ObjectHolder holder, object value)
static string Serialization_InvalidFixupDiscovered
Definition SR.cs:42
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Serialization_MissingObject
Definition SR.cs:40
static string Serialization_ValueTypeFixup
Definition SR.cs:46
static string Serialization_PartialValueTypeFixup
Definition SR.cs:48
static string Serialization_UnableToFixup
Definition SR.cs:50
static string Serialization_TypeLoadFailure
Definition SR.cs:44
Definition SR.cs:7

References System.Runtime.Serialization.ObjectManager._fixupCount, System.Runtime.Serialization.Array, System.Runtime.Serialization.ObjectManager.CanCallGetType(), System.Runtime.Serialization.Dictionary, System.Runtime.Serialization.ObjectManager.DoValueTypeFixup(), System.SR.Format(), System.Runtime.Serialization.ObjectManager.GetCompletionInfo(), System.SR.Serialization_InvalidFixupDiscovered, System.SR.Serialization_MissingObject, System.SR.Serialization_PartialValueTypeFixup, System.SR.Serialization_TypeLoadFailure, System.SR.Serialization_UnableToFixup, System.SR.Serialization_ValueTypeFixup, and System.Runtime.Serialization.FormatterServices.SerializationSetValue().

Referenced by System.Runtime.Serialization.ObjectManager.DoFixups(), System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups(), and System.Runtime.Serialization.ObjectManager.RegisterObject().