Я изучал, как выполнить модульное тестирование IPofSerializer, и я ожидаю, что это похоже на вашу проблему. Я обнаружил, что для правильной сериализации и десериализации пользовательского типа необходимо вызвать PofStreamWriter.WriteObject и PofStreamReader.ReadObject. Тип пользователя также должен быть зарегистрирован в PofContext для правильной работы.
Причина этого заключается в том, что класс PofStreamWriter содержит вложенный подкласс, к которому он относится при сериализации пользовательских типов. Этот подкласс записывает дополнительные данные о типе, которые PofStreamReader затем использует для правильной десериализации типа. Без этих дополнительных данных PofStreamReader не может определить, какой это тип и какой сериализатор следует использовать. Похоже, что он просто не настроен на тестирование сериализатора в полной изоляции, так как PofStreamReader и PofStreamWriter должны поддерживать большое количество состояний во время сериализации.
Для тестирования IPofSerializer я делаю следующее
var context = new SimplePofContext()
context.RegisterUserType(1001, typeof(SerializableType), new SerializatableTypeSerializer())
using (var ms = new MemoryStream())
{
var writer = new PofStreamWriter(new DataWriter(ms), context);
writer.WriteObject(0, object);
ms.Seek(0,0);
var reader = new PofStreamReader(new DataReader(ms), context);
var ob = reader.ReadObject(0)
}
Я подозреваю, но не проверял, что для объектов IPortableOb вам не нужно ничего регистрировать в параметре контекста, чтобы это работало.