1
This commit is contained in:
@@ -61,51 +61,53 @@ namespace BITKit
|
||||
|
||||
public static object Read(BinaryReader reader)
|
||||
{
|
||||
try
|
||||
if (reader.ReadBoolean())
|
||||
{
|
||||
if (reader.ReadBoolean())
|
||||
var objs = new object[reader.ReadInt32()];
|
||||
for (var i = 0; i < objs.Length; i++)
|
||||
{
|
||||
var objs = new object[reader.ReadInt32()];
|
||||
for (var i = 0; i < objs.Length; i++)
|
||||
{
|
||||
objs[i] = Read(reader);
|
||||
}
|
||||
return objs.ToArray();
|
||||
objs[i] = ReadInternel(reader);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
var typeName = reader.ReadString();
|
||||
if (netReaders.TryGetValue(typeName, out var netReader))
|
||||
return netReader.ReadBinaryAsObject(reader);
|
||||
|
||||
var instance = System.Activator.CreateInstance(BITSharp.GetTypeFromFullName(typeName));
|
||||
if (instance is IBinarySerialize serialize)
|
||||
{
|
||||
serialize.Read(reader);
|
||||
return instance;
|
||||
return objs.ToArray();
|
||||
}
|
||||
|
||||
var json = reader.ReadString();
|
||||
if (string.IsNullOrEmpty(json))
|
||||
|
||||
return ReadInternel(reader);
|
||||
|
||||
object ReadInternel(BinaryReader reader)
|
||||
{
|
||||
throw new Exception($"从二进制中读取的json值为空");
|
||||
var typeName = reader.ReadString();
|
||||
|
||||
|
||||
if (netReaders.TryGetValue(typeName, out var netReader))
|
||||
return netReader.ReadBinaryAsObject(reader);
|
||||
|
||||
var instance = System.Activator.CreateInstance(BITSharp.GetTypeFromFullName(typeName));
|
||||
if (instance is IBinarySerialize serialize)
|
||||
{
|
||||
serialize.Read(reader);
|
||||
return instance;
|
||||
}
|
||||
|
||||
var json = reader.ReadString();
|
||||
if (string.IsNullOrEmpty(json))
|
||||
{
|
||||
throw new Exception($"从二进制中读取的json值为空");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (BITSharp.TryGetTypeFromFullName(typeName, out var type))
|
||||
return JsonConvert.DeserializeObject(json, type);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
BIT4Log.Warning<BITBinary>($"反序列化失败,类型:{typeName},值:\n{json}");
|
||||
BIT4Log.LogException(e);
|
||||
}
|
||||
|
||||
throw new Exception("未找到读取该二进制的BinaryReader");
|
||||
}
|
||||
try
|
||||
{
|
||||
if (BITSharp.TryGetTypeFromFullName(typeName, out var type))
|
||||
return JsonConvert.DeserializeObject(json, type);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
BIT4Log.Warning<BITBinary>($"反序列化失败,类型:{typeName},值:\n{json}");
|
||||
BIT4Log.LogException(e);
|
||||
}
|
||||
throw new Exception("未找到读取该二进制的BinaryReader");
|
||||
}
|
||||
|
||||
public static byte[] WriteAsBytes(object value)
|
||||
@@ -119,47 +121,45 @@ namespace BITKit
|
||||
{
|
||||
if (value is object[] objects)
|
||||
{
|
||||
if (objects.Length is 1)
|
||||
writer.Write(true);
|
||||
writer.Write(objects.Length);
|
||||
foreach (var obj in objects)
|
||||
{
|
||||
writer.Write(false);
|
||||
value = objects[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(true);
|
||||
writer.Write(objects.Length);
|
||||
foreach (var obj in objects)
|
||||
{
|
||||
Write(writer,obj);
|
||||
}
|
||||
WriteInterel(writer, obj);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(false);
|
||||
WriteInterel(writer,value);
|
||||
}
|
||||
var typeName = value.GetType().FullName;
|
||||
writer.Write(typeName!);
|
||||
if (netReaders.TryGetValue(typeName, out var netReader))
|
||||
return;
|
||||
void WriteInterel(BinaryWriter writer, object value)
|
||||
{
|
||||
netReader.WriteBinaryAsObject(writer,value);
|
||||
}
|
||||
else if (value is IBinarySerialize serialize)
|
||||
{
|
||||
serialize.Write(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
var typeName = value.GetType().FullName;
|
||||
writer.Write(typeName!);
|
||||
if (netReaders.TryGetValue(typeName, out var netReader))
|
||||
{
|
||||
writer.Write(JsonConvert.SerializeObject(value));
|
||||
netReader.WriteBinaryAsObject(writer,value);
|
||||
}
|
||||
catch (Exception e)
|
||||
else if (value is IBinarySerialize serialize)
|
||||
{
|
||||
BIT4Log.Warning<BITBinary>(typeName);
|
||||
throw;
|
||||
serialize.Write(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
writer.Write(JsonConvert.SerializeObject(value));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
BIT4Log.Warning<BITBinary>(typeName);
|
||||
throw;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
public static bool IsSupport(object obj) => IsSupport(obj.GetType().FullName);
|
||||
|
Reference in New Issue
Block a user