I\'m trying to use ProtoBuf-NET in my project (it\'s mostly Silverlight 4 project).
I\'m having difficulties serializing my Model collections, they all are defined l
I was trying to cut corners, and to reuse my model as a message contract, but this is actually wrong aproach. The way to go is to create DTO's specialized classes and converter to you model, anyway it's good to separate your model from messages.
I must criticize Marc though, for adding ProtoContract and ProtoMemeber attributes that lure users to reuse their model by attributing it.
not at current, no; the type exposed must have (at a minimum) an Add
method. While I have no objection to investigating the possibility of an Add
outside the object itself, this is complicated since you are then looking at a different "primary" object (the sequence vs the container). However; if your parent object implemented IEnumerable<T>
(returning _itemsSet.GetEnumerator()
etc), then it would find the Add
automatically
I can't see the context here; however, I suspect that without the Add
it still isn't happy to consider it a list in the first place. I see the way you are going with that, though, and it is perhaps a way it could reason "I can use a List<T>
here)
It isn't something I've investigated, to be honest; so: no
The type exposed in the property must, as a minimum: implement IEnumerable
(although IEnumerable<T>
would be preferred), and expose an Add(T)
method. It doesn't have to be Collection<T>
/ List<T>
/ etc - simply: it must (at present) have some mechanism to add. IList<T>
would be a a pragmatic option, but I gather that isn't quite what you want.
Jonathan is right that a surrogate for the outer-class (the thing which has _itemsSet
, TSet
and AddT
) might also be an option.
If the outer-class only exists to have the collection and the add method, then just adding : IEnumerable<T>
and renaming AddT
to Add
would probably make it work.