1
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
using UnityEngine;
|
||||
#endif
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -61,15 +62,22 @@ namespace BITKit
|
||||
|
||||
public static object Read(BinaryReader reader)
|
||||
{
|
||||
// 检测是否为数组
|
||||
if (reader.ReadBoolean())
|
||||
{
|
||||
var objs = new object[reader.ReadInt32()];
|
||||
for (var i = 0; i < objs.Length; i++)
|
||||
//读取数组类型的名称
|
||||
var arrayTypeName = reader.ReadString();
|
||||
//获取数组类型
|
||||
var arrayType = BITSharp.GetTypeFromFullName(arrayTypeName);
|
||||
//创建数组实例
|
||||
var array = Array.CreateInstance(arrayType, reader.ReadInt32());
|
||||
//循环Reader
|
||||
for (var i = 0; i < array.Length; i++)
|
||||
{
|
||||
objs[i] = ReadInternel(reader);
|
||||
//设置值
|
||||
array.SetValue(ReadInternel(reader),i);
|
||||
}
|
||||
|
||||
return objs.ToArray();
|
||||
return array;
|
||||
}
|
||||
|
||||
return ReadInternel(reader);
|
||||
@@ -82,7 +90,18 @@ namespace BITKit
|
||||
if (netReaders.TryGetValue(typeName, out var netReader))
|
||||
return netReader.ReadBinaryAsObject(reader);
|
||||
|
||||
var instance = System.Activator.CreateInstance(BITSharp.GetTypeFromFullName(typeName));
|
||||
var type = BITSharp.GetTypeFromFullName(typeName);
|
||||
|
||||
object instance = null;
|
||||
if (type.IsArray)
|
||||
{
|
||||
instance = Array.CreateInstance(type.GetElementType()!, reader.ReadInt32());
|
||||
}
|
||||
else
|
||||
{
|
||||
instance = System.Activator.CreateInstance(type);
|
||||
}
|
||||
|
||||
if (instance is IBinarySerialize serialize)
|
||||
{
|
||||
serialize.Read(reader);
|
||||
@@ -97,7 +116,7 @@ namespace BITKit
|
||||
|
||||
try
|
||||
{
|
||||
if (BITSharp.TryGetTypeFromFullName(typeName, out var type))
|
||||
if (BITSharp.TryGetTypeFromFullName(typeName, out type))
|
||||
return JsonConvert.DeserializeObject(json, type);
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -119,11 +138,13 @@ namespace BITKit
|
||||
}
|
||||
public static void Write(BinaryWriter writer, object value)
|
||||
{
|
||||
if (value is object[] objects)
|
||||
if (value is IEnumerable enumerable)
|
||||
{
|
||||
var pars = enumerable.Cast<object>().ToArray();
|
||||
writer.Write(true);
|
||||
writer.Write(objects.Length);
|
||||
foreach (var obj in objects)
|
||||
writer.Write(value.GetType().GetElementType()!.FullName!);
|
||||
writer.Write(pars.Count());
|
||||
foreach (var obj in pars)
|
||||
{
|
||||
WriteInterel(writer, obj);
|
||||
}
|
||||
|
Reference in New Issue
Block a user