У меня есть класс F #, который должен быть сериализован.
Чтобы показать мою проблему, я сделал это навалом:
[<Serializable>]
type TestValidator(min) =
let Test value =
min < value
Когда я хочу сериализовать / десериализовать это, я получаю следующее сообщение об ошибке:
Двоичный поток '0' не содержит допустимого BinaryHeader. Возможные причины: неверное изменение потока или версии объекта между сериализацией и десериализацией.
Пример кода C # для сериализации:
var test = new Validator.TestValidator(0);
var ser = CodeHelper.ByteUtils.BinarySerializeObject(test);
var deser = CodeHelper.ByteUtils.BinaryDeSerializeObject(ser.Generic);
CodeHelper.ByteUtils.BinarySerializeObject:
public static DetailedBoolObjectRet<byte[]> BinarySerializeObject(object input)
{
try
{
var ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, input);
byte[] bytes = new byte[ms.Length];
ms.Position = 0;
ms.Read(bytes, 0, bytes.Length);
return new DetailedBoolObjectRet<byte[]>(bytes, true);
}
catch (System.Exception exc)
{
Debug.Assert(false, exc.Message);
return new DetailedBoolObjectRet<byte[]>(null, false, exc.Message);
}
}
public static DetailedBoolObjectRet<object> BinaryDeSerializeObject(byte[] input)
{
try
{
var ms = new MemoryStream(input);
BinaryFormatter formatter = new BinaryFormatter();
var deserialized = formatter.Deserialize(ms);
return new DetailedBoolObjectRet<object>(deserialized, true);
}
catch (System.Exception exc)
{
Debug.Assert(false, exc.Message);
return new DetailedBoolObjectRet<object>(null, false, exc.Message);
}
}
В чем может быть проблема с сериализацией?