をシリアル化しようとしていますが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 に引っかかっています。
アイテムとその派生型は問題なく [逆] シリアル化できます。[1] を参照してください。ただし、IItemCollection の逆シリアル化は失敗します (シリアル化は機能します)。ItemCollection には ItemExpression プロパティがあり、逆シリアル化する場合、protobuf は抽象クラスを作成できません。これは私には理にかなっていますが、どうすればそれを乗り越えられるかわかりません。
ItemExpression<T> : ItemExpression, IItemExpression
ItemExpression : Expression
ItemExpression は Expression と同様に抽象的です
これを正しく機能させるにはどうすればよいですか?
また、コンパイル時に IItemCollections が異なり、不明になるため、ItemTransaction が失敗するのではないかと心配しています (ItemTransaction には FooCollection、BarCollection、FlimCollection、FlamCollection などがあります)。
何が足りないのですか (Marc) ?