Thanks a lot for the explanation Marc.

I'm currently investigating some interop issues we're having and I'm 
starting to realize that this might be the source of the problem.

 [CollectionDataContract(Name = "ItemList")]
 public class ItemList<TItem> : List<Item<TItem>> where TItem : class
...
where

    [DataContract(Name = "Item")]
    public class Item<TItem>  where TItem : class
    {
        [DataMember(Order = 1, Name = "Item")]
        public TItem Item { get; set; }
...

The TItems are classes generated from .proto files.  So we're mixing the 
functionality (annotated classes vs. proto files).

I think we're breaking a lot of "rules" here and I'm wondering how this 
could ever generate valid .proto files.
That is, if it were to work, I have trouble picturing what Serializer.
GetProto<ItemList>() might output.

This does appear to be working between clients using protobuf-net but I 
guess what I'm looking for is confirmation that this would probably not 
work nicely interop-ing with other Protocol Buffer libraries.

(Note: I'm new to this stuff, so if I'm not making any sense at all let me 
know and I'll return with a smarter question.)


Joel


On Wednesday, June 27, 2012 4:07:49 PM UTC-4, Marc Gravell wrote:
>
> The data is of course compatible. A `List<Foo>` is directly mappable to 
> .proto via for example:
>
>     message SomeOuterMessage {
>         repeated Foo items = 1;
>     }
>
> In fact, for that reason, serializing a List<Foo> will produce **exactly** 
> the same data on the wire as serializing:
>
>     [ProtoContract]
>     public class Whatever {
>         [ProtoMember(1)]
>         public List<Foo> Items {get;set;}
>     }
>
> which is (give or take) what you will get if you feed the above .proto 
> into "protogen" (protobuf-net's entirely optional code generator for 
> handling .proto definitions)
>
> Marc
>
>
>
> On 27 June 2012 16:21, Joel Carrier <[email protected]> wrote:
>
>> Hi Marc,
>>
>> Could you elaborate on your note:  (note: this is specific to 
>> protobuf-net, not "protocol buffers" more widely) 
>>
>> What are the implications if communicating with non-protobuf-net targets? 
>>  (ie. java, python, ... applications)
>>
>> Joel
>>
>>
>> On Wednesday, June 20, 2012 9:05:49 AM UTC-4, Marc Gravell wrote:
>>>
>>> (note: this is specific to protobuf-net, not "protocol buffers" more 
>>> widely), but yes: that (a generic list) would work fine, as long as the 
>>> property has been marked for serialization and given a number. There also 
>>> doesn't need to be a "set" accessor, although it can make full use of a 
>>> "set" - i.e. if it finds the list is "null", it will create a new list of 
>>> the appropriate type and use the "set" to update the object.
>>>
>>> So, your code would be fine if it has been designated a number, or a 
>>> related example:
>>>
>>>     [ProtoMember(4)]
>>>     public List<Order> Orders { get  { return orders; } } 
>>>     private readonly List<Order> orders = new List<Order>();
>>>
>>> Marc
>>> (protobuf-net)
>>>
>>> On 20 June 2012 13:08, Farooq Mushtaq <[email protected]> wrote:
>>>
>>>> How can we serialize list of objects by using protobuf-net? Is 
>>>> protobuf-net support list of objects like 
>>>> public List(ABC) DEF
>>>> {
>>>>        get;
>>>>        set;
>>>> }
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Protocol Buffers" group.
>>>> To view this discussion on the web visit https://groups.google.com/d/**
>>>> msg/protobuf/-/W0yySDcbES8J<https://groups.google.com/d/msg/protobuf/-/W0yySDcbES8J>
>>>> .
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to protobuf+unsubscribe@**
>>>> googlegroups.com <protobuf%[email protected]>.
>>>> For more options, visit this group at http://groups.google.com/**
>>>> group/protobuf?hl=en <http://groups.google.com/group/protobuf?hl=en>.
>>>>
>>>
>>>
>>>
>>> -- 
>>> Regards, 
>>>
>>> Marc
>>>  
>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Protocol Buffers" group.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msg/protobuf/-/2pcXp7q9LCcJ.
>>
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected].
>> For more options, visit this group at 
>> http://groups.google.com/group/protobuf?hl=en.
>>
>
>
>
> -- 
> Regards, 
>
> Marc
>  

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/protobuf/-/SUzHf4_n0O4J.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to