饭太稀
This commit is contained in:
@@ -0,0 +1,212 @@
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using MemoryPack;
|
||||
|
||||
namespace Fantasy.Serialize
|
||||
{
|
||||
/// <summary>
|
||||
/// MemoryPack帮助类
|
||||
/// </summary>
|
||||
public sealed class MemoryPackHelper : ISerialize
|
||||
{
|
||||
/// <summary>
|
||||
/// 序列化器的名字
|
||||
/// </summary>
|
||||
public string SerializeName { get; } = "MemoryPack";
|
||||
|
||||
/// <summary>
|
||||
/// 反序列化
|
||||
/// </summary>
|
||||
/// <param name="bytes"></param>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
public T Deserialize<T>(byte[] bytes)
|
||||
{
|
||||
var @object = MemoryPackSerializer.Deserialize<T>(bytes);
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.AfterDeserialization();
|
||||
}
|
||||
|
||||
return @object;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 反序列化
|
||||
/// </summary>
|
||||
/// <param name="buffer"></param>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
public T Deserialize<T>(MemoryStreamBuffer buffer)
|
||||
{
|
||||
var @object = MemoryPackSerializer.Deserialize<T>(buffer.GetSpan());
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.AfterDeserialization();
|
||||
}
|
||||
|
||||
return @object;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 反序列化
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="bytes"></param>
|
||||
/// <returns></returns>
|
||||
public object Deserialize(Type type, byte[] bytes)
|
||||
{
|
||||
var @object = MemoryPackSerializer.Deserialize(type,bytes);
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.AfterDeserialization();
|
||||
}
|
||||
|
||||
return @object;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 反序列化
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="buffer"></param>
|
||||
/// <returns></returns>
|
||||
public object Deserialize(Type type, MemoryStreamBuffer buffer)
|
||||
{
|
||||
var @object = MemoryPackSerializer.Deserialize(type, buffer.GetSpan());
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.AfterDeserialization();
|
||||
}
|
||||
|
||||
return @object;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 反序列化
|
||||
/// </summary>
|
||||
/// <param name="bytes"></param>
|
||||
/// <param name="index"></param>
|
||||
/// <param name="count"></param>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
public T Deserialize<T>(byte[] bytes, int index, int count)
|
||||
{
|
||||
var @object = MemoryPackSerializer.Deserialize<T>(new ReadOnlySpan<byte>(bytes, index, count));
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.AfterDeserialization();
|
||||
}
|
||||
|
||||
return @object;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 反序列化
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="bytes"></param>
|
||||
/// <param name="index"></param>
|
||||
/// <param name="count"></param>
|
||||
/// <returns></returns>
|
||||
public object Deserialize(Type type, byte[] bytes, int index, int count)
|
||||
{
|
||||
var @object = MemoryPackSerializer.Deserialize(type, new ReadOnlySpan<byte>(bytes, index, count));
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.AfterDeserialization();
|
||||
}
|
||||
|
||||
return @object;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 序列化
|
||||
/// </summary>
|
||||
/// <param name="object"></param>
|
||||
/// <param name="buffer"></param>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public void Serialize<T>(T @object, IBufferWriter<byte> buffer)
|
||||
{
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.BeginInit();
|
||||
}
|
||||
|
||||
MemoryPackSerializer.Serialize<T, IBufferWriter<byte>>(buffer, @object);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 序列化
|
||||
/// </summary>
|
||||
/// <param name="object"></param>
|
||||
/// <param name="buffer"></param>
|
||||
public void Serialize(object @object, IBufferWriter<byte> buffer)
|
||||
{
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.BeginInit();
|
||||
}
|
||||
|
||||
MemoryPackSerializer.Serialize(@object.GetType(), buffer, @object);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 序列化
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="object"></param>
|
||||
/// <param name="buffer"></param>
|
||||
public void Serialize(Type type, object @object, IBufferWriter<byte> buffer)
|
||||
{
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.BeginInit();
|
||||
}
|
||||
|
||||
MemoryPackSerializer.Serialize(type, buffer, @object);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 序列化
|
||||
/// </summary>
|
||||
/// <param name="object"></param>
|
||||
/// <returns></returns>
|
||||
public byte[] Serialize(object @object)
|
||||
{
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.BeginInit();
|
||||
}
|
||||
|
||||
return MemoryPackSerializer.Serialize(@object.GetType(), @object);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 序列化
|
||||
/// </summary>
|
||||
/// <param name="object"></param>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
public byte[] Serialize<T>(T @object)
|
||||
{
|
||||
if (@object is ASerialize aSerialize)
|
||||
{
|
||||
aSerialize.BeginInit();
|
||||
}
|
||||
|
||||
return MemoryPackSerializer.Serialize<T>(@object);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 克隆
|
||||
/// </summary>
|
||||
/// <param name="t"></param>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
public T Clone<T>(T t)
|
||||
{
|
||||
return Deserialize<T>(Serialize(t));
|
||||
}
|
||||
}
|
||||
}
|
||||
25
Fantasy/Fantasy.Packages/Fantasy.MemoryPack/README.md
Normal file
25
Fantasy/Fantasy.Packages/Fantasy.MemoryPack/README.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Fantasy.MemoryPack 扩展包
|
||||
## Unity
|
||||
Unity使用,只需要再Unity文件夹里,导入Fantays.MemoryPack.unitypackage到Unity里即可。
|
||||
## Net
|
||||
* 在你的项目里用Nuget或dotnet add package MemoryPack安装MemoryPack的库。
|
||||
* 再Net文件夹里把MemoryPack文件夹拷贝的项目中。
|
||||
## Tools
|
||||
编辑改导表工具ExporterSettings.json文件,在文件Serializes里增加MemoryPack协议的说明.
|
||||
```json
|
||||
"Serializes": {
|
||||
"Value": [
|
||||
{
|
||||
"KeyIndex": 0,
|
||||
"NameSpace" : "MemoryPack",
|
||||
"SerializeName": "MemoryPack",
|
||||
"Attribute": "\t[MemoryPackable]",
|
||||
"Ignore": "\t\t[MemoryPackIgnore]",
|
||||
"Member": "MemoryPackOrder"
|
||||
}
|
||||
],
|
||||
"Comment": "自定义序列化器"
|
||||
}
|
||||
```
|
||||
## 使用注意
|
||||
无论是Unity或Net下,导入所在的项目,必须要把当前程序集装载到框架中才可以。
|
||||
Binary file not shown.
Reference in New Issue
Block a user