Я пытаюсь сериализовать пользовательский класс в массив byte [] с помощью BinaryFormatter, загрузить его в steam с использованием 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' обусловлен тем, что вектор Unity3не сериализуем
[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);
}
}