J'essaie de sérialiser un ItemTransaction
et protobuf-net (r282) a un problème.Est-ce que protobuf-net peut sérialiser cette combinaison d'interface et de collection générique?
ItemTransaction : IEnumerable<KeyValuePair<Type, IItemCollection>></code>
et ItemCollection est comme ceci:
FooCollection : ItemCollection<Foo>
ItemCollection<T> : BindingList<T>, IItemCollection
IItemCollection : IList<Item>
où T est un type d'élément dérivé. ItemCollection a également une propriété de type IItemCollection.
Je sérialisation comme ceci:
IItemCollection itemCol = someService.Blah(...);
...
SerializeWithLengthPrefix<IItemCollection>(stream, itemCol, PrefixStyle.Base128);
Mon objectif final est de sérialisation ItemTransaction, mais je suis accroché avec IItemCollection.
L'élément et ses types dérivés peuvent être [de] sérialisés sans problème, voir [1], mais la désérialisation d'un IItemCollection échoue (travaux de sérialisation). ItemCollection a une propriété ItemExpression et lors de la désérialisation de protobuf ne peut pas créer une classe abstraite. Cela a du sens pour moi, mais je ne suis pas sûr de savoir comment le surmonter.
ItemExpression<T> : ItemExpression, IItemExpression
ItemExpression : Expression
ItemExpression est abstraite comme l'est l'expression
Comment puis-je obtenir que cela fonctionne correctement?
Aussi, je crains que ItemTransaction échouera puisque les IItemCollections vont être différentes et inconnues au moment de la compilation (un ItemTransaction aura FooCollection, BarCollection, FlimCollection, FlamCollection, etc.).
Qu'est-ce qui me manque (Marc)?
[1] protobuf-net [de]serializing across assembly boundaries
Pour info, tests spécifiques ajoutés et passés pour "v2"; Je n'ai pas touché le code (manquant) avec le préfixe with-length-length, mais j'y suis arrivé: http://code.google.com/p/protobuf-net/source/browse/trunk/protobuf-net.unittest/Meta/ AbstractListsWithInheritance.cs –