我正在尝试使用 BinaryFormatter 将自定义类序列化为 byte[] 数组,使用 steam-api 将其上传到 steam,稍后再次下载并将其反序列化回自定义类。蒸汽部分已经在工作,但是当我反序列化 byte[] 90% 的时间时,我收到一个 SerializationException“在解析完成之前遇到流结束”,或者它实际上创建了类的实例,但值都是错误的。
虽然 10% 的时间可以正常工作,但不知道为什么它有时会起作用,但不是大多数时候。
有问题的班级
[Serializable]
public class ReplayEntry
{
public List<SerializableVector3> Position;
public List<SerializableVector3> Rotation;
public List<SerializableVector3> Velocity;
public float Offset;
public UGCHandle_t handle;
\\... Constructors below
}
序列化:
public static byte[] ObjectToByteArray(Object obj)
{
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms, obj);
ms.Flush();
return ms.ToArray();
}
}
反序列化:
public static Object ByteArrayToObject(byte[] arrBytes)
{
using (MemoryStream memStream = new MemoryStream(arrBytes))
{
BinaryFormatter binForm = new BinaryFormatter();
memStream.Write(arrBytes, 0, arrBytes.Length);
memStream.Seek(0, SeekOrigin.Begin);
var obj = binForm.Deserialize(memStream);
return obj;
}
}
'SerializeableVector3' 类型是因为 Unity 的 vector3 不可序列化
[Serializable]
public struct SerializableVector3
{
public float x;
public float y;
public float z;
public SerializableVector3(float rX, float rY, float rZ)
{
x = rX;
y = rY;
z = rZ;
}
public static implicit operator Vector3(SerializableVector3 rValue)
{
return new Vector3(rValue.x, rValue.y, rValue.z);
}
public static implicit operator SerializableVector3(Vector3 rValue)
{
return new SerializableVector3(rValue.x, rValue.y, rValue.z);
}
}