This commit is contained in:
CortexCore
2024-11-03 16:38:17 +08:00
parent 056e2cada5
commit 4ba741408d
4693 changed files with 2445 additions and 5443 deletions

View File

@@ -137,50 +137,58 @@ namespace BITKit
}
public static void Write(BinaryWriter writer, object value)
{
if (value is not string && value is IList enumerable)
try
{
var pars = enumerable.Cast<object>().ToArray();
writer.Write(true);
writer.Write(value.GetType().GetElementType()!.FullName!);
writer.Write(pars.Length);
foreach (var obj in pars)
if (value is not string && value is IList enumerable)
{
WriteInterel(writer, obj);
}
}
else
{
writer.Write(false);
WriteInterel(writer,value);
}
return;
void WriteInterel(BinaryWriter writer, object value)
{
var typeName = value.GetType().FullName;
writer.Write(typeName!);
if (netReaders.TryGetValue(typeName, out var netReader))
{
netReader.WriteBinaryAsObject(writer,value);
}
else if (value is IBinarySerialize serialize)
{
serialize.Write(writer);
var pars = enumerable.Cast<object>().ToArray();
writer.Write(true);
writer.Write(value.GetType().GetElementType()!.FullName!);
writer.Write(pars.Length);
foreach (var obj in pars)
{
WriteInterel(writer, obj);
}
}
else
{
try
{
writer.Write(JsonConvert.SerializeObject(value));
}
catch (Exception)
{
BIT4Log.Warning<BITBinary>(typeName);
throw;
}
writer.Write(false);
WriteInterel(writer,value);
}
return;
void WriteInterel(BinaryWriter writer, object value)
{
var typeName = value.GetType().FullName;
writer.Write(typeName!);
if (netReaders.TryGetValue(typeName, out var netReader))
{
netReader.WriteBinaryAsObject(writer,value);
}
else if (value is IBinarySerialize serialize)
{
serialize.Write(writer);
}
else
{
try
{
writer.Write(JsonConvert.SerializeObject(value));
}
catch (Exception)
{
BIT4Log.Warning<BITBinary>(typeName);
throw;
}
}
}
}
catch (Exception e)
{
throw;
}
}
public static bool IsSupport(object obj) => IsSupport(obj.GetType().FullName);
public static bool IsSupport(Type type) => IsSupport(type.FullName);