BinaryFormatter
ведет себя странно в моем коде. У меня есть код, как следующиеКак бинарныйформат сериализует объекты?
[Serializable]
public class LogEntry
{
private int id;
private List<object> data = new List<object>();
public int Id
{
get { return id; }
}
public IList<object> Data
{
get { return data.AsReadOnly(); }
}
...
}
....
....
private static readonly BinaryFormatter logSerializer = new BinaryFormatter();
....
....
public void SerializeLog(IList<LogEntry> logEntries)
{
using (MemoryStream serializationStream = new MemoryStream())
{
logSerializer.Serialize(serializationStream, logEntries);
this.binarySerializedLog = serializationStream.GetBuffer();
}
}
В некоторой машине (32 или 64 бит в машине), она сериализация в двоичном формате - который, как ожидается. Но в некоторых машинах (все они 64-битные машины, а не для отладочных сборников) он не сериализуется, binarySerializedLog
показывает ToString()
значение всего отдельного Data
, имя класса (...LogEntry
) и значение id
. Мой вопрос: есть ли конкретная причина такого поведения или я ошибаюсь? Заранее спасибо.
После сериализации в двоичном формате это должно выглядеть так: AAEAAAD ///// AQAAAAAAAAAMAgAAAHlNaWNyb3NvZnQ .... AAAAAAA == - Вместо этого он показывает что-то вроде: ExecutionResponse'1 [Response2] LogEntry2 - где ExecutionResponse'1 [Response2] находится в .Data (в данном конкретном случае Data содержит один элемент типа ExecutionResponse, который имеет список объектов Response2 (здесь единственный объект Response2 в списке), LogEntry - это текущее имя класса nad 2 - это идентификатор. – malay
Well , последнее в целом - то, что я ожидаю - это * выглядит * как метаданные типа, которые идут перед необработанными данными, а затем поля ... Я не уверен, что это неправильно (пока). –
Но во втором если не все данные присутствуют в сериализованном журнале, правильно? Я имею в виду, что невозможно будет дезацинировать из второго журнала (т.е. в ExecutionResponse'1 [Response2] LogEntry2). onse2 присутствует там, хотя Response2 сериализуем. – malay