Files
2026-03-04 10:03:45 +08:00

89 lines
2.1 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
namespace Gaia.FullSerializer.Internal
{
public class fsArrayConverter : fsConverter
{
public override bool CanProcess(Type type)
{
return type.IsArray;
}
public override bool RequestCycleSupport(Type storageType)
{
return false;
}
public override bool RequestInheritanceSupport(Type storageType)
{
return false;
}
public override fsResult TrySerialize(object instance, out fsData serialized, Type storageType)
{
IList list = (Array)instance;
Type elementType = storageType.GetElementType();
fsResult success = fsResult.Success;
serialized = fsData.CreateList(list.Count);
List<fsData> asList = serialized.AsList;
for (int i = 0; i < list.Count; i++)
{
object instance2 = list[i];
fsData data;
fsResult result = Serializer.TrySerialize(elementType, instance2, out data);
success.AddMessages(result);
if (!result.Failed)
{
asList.Add(data);
}
}
return success;
}
public override fsResult TryDeserialize(fsData data, ref object instance, Type storageType)
{
fsResult success = fsResult.Success;
fsResult fsResult2 = (success += CheckType(data, fsDataType.Array));
if (fsResult2.Failed)
{
return success;
}
Type elementType = storageType.GetElementType();
List<fsData> asList = data.AsList;
ArrayList arrayList = new ArrayList(asList.Count);
int count = arrayList.Count;
for (int i = 0; i < asList.Count; i++)
{
fsData data2 = asList[i];
object result = null;
if (i < count)
{
result = arrayList[i];
}
fsResult result2 = Serializer.TryDeserialize(data2, elementType, ref result);
success.AddMessages(result2);
if (!result2.Failed)
{
if (i < count)
{
arrayList[i] = result;
}
else
{
arrayList.Add(result);
}
}
}
instance = arrayList.ToArray(elementType);
return success;
}
public override object CreateInstance(fsData data, Type storageType)
{
return fsMetaType.Get(storageType).CreateInstance();
}
}
}