57 lines
1.6 KiB
C#
57 lines
1.6 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Runtime.Serialization;
|
|
|
|
namespace UnityEngine.Serialization
|
|
{
|
|
// Token: 0x020004EE RID: 1262
|
|
internal class ListSerializationSurrogate : ISerializationSurrogate
|
|
{
|
|
// Token: 0x06003C2D RID: 15405 RVA: 0x00069F48 File Offset: 0x00068148
|
|
public void GetObjectData(object obj, SerializationInfo info, StreamingContext context)
|
|
{
|
|
IList list = (IList)obj;
|
|
info.AddValue("_size", list.Count);
|
|
info.AddValue("_items", ListSerializationSurrogate.ArrayFromGenericList(list));
|
|
info.AddValue("_version", 0);
|
|
}
|
|
|
|
// Token: 0x06003C2E RID: 15406 RVA: 0x00069F8C File Offset: 0x0006818C
|
|
public object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
|
|
{
|
|
IList list = (IList)Activator.CreateInstance(obj.GetType());
|
|
int @int = info.GetInt32("_size");
|
|
object obj2;
|
|
if (@int == 0)
|
|
{
|
|
obj2 = list;
|
|
}
|
|
else
|
|
{
|
|
IEnumerator enumerator = ((IEnumerable)info.GetValue("_items", typeof(IEnumerable))).GetEnumerator();
|
|
for (int i = 0; i < @int; i++)
|
|
{
|
|
if (!enumerator.MoveNext())
|
|
{
|
|
throw new InvalidOperationException();
|
|
}
|
|
list.Add(enumerator.Current);
|
|
}
|
|
obj2 = list;
|
|
}
|
|
return obj2;
|
|
}
|
|
|
|
// Token: 0x06003C2F RID: 15407 RVA: 0x0006A024 File Offset: 0x00068224
|
|
private static Array ArrayFromGenericList(IList list)
|
|
{
|
|
Array array = Array.CreateInstance(list.GetType().GetGenericArguments()[0], list.Count);
|
|
list.CopyTo(array, 0);
|
|
return array;
|
|
}
|
|
|
|
// Token: 0x04001251 RID: 4689
|
|
public static readonly ISerializationSurrogate Default = new ListSerializationSurrogate();
|
|
}
|
|
}
|