0

我正在尝试使用 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);
    }
}
4

0 回答 0