Я пытаюсь сериализовать ItemTransaction
, и у protobuf-net (r282) возникла проблема.
ItemTransaction : IEnumerable<KeyValuePair<Type, IItemCollection>></code>
и ItemCollection выглядит следующим образом:
FooCollection : ItemCollection<Foo>
ItemCollection<T> : BindingList<T>, IItemCollection
IItemCollection : IList<Item>
где T является производным типом Item. ItemCollection также имеет свойство типа IItemCollection.
Я сериализирую так:
IItemCollection itemCol = someService.Blah(...);
...
SerializeWithLengthPrefix<IItemCollection>(stream, itemCol, PrefixStyle.Base128);
Моя конечная цель - сериализовать ItemTransaction, но я зацеплен за IItemCollection.
Элемент и его производные типы могут быть [de] сериализованы без проблем, см. [1], но десериализация IItemCollection не выполняется (сериализация работает). ItemCollection имеет свойство ItemExpression и при десериализации protobuf не может создать абстрактный класс. Это имеет смысл для меня, но я не уверен, как пройти через это.
ItemExpression<T> : ItemExpression, IItemExpression
ItemExpression : Expression
ItemExpression является абстрактным, как и выражение
Как мне заставить это работать должным образом?
Кроме того, я обеспокоен тем, что ItemTransaction потерпит неудачу, так как коллекции IItemCollection будут отличаться и неизвестны во время компиляции (ItemTransaction будет иметь FooCollection, BarCollection, FlimCollection, FlamCollection и т. Д.).
Чего мне не хватает (Марк)?
[1] protobuf-net [de] сериализация через границы сборки