Hello Mark.

Is it possible for me to serialize and deserialize a list directly? Like 
this:

public static void Serialize<T>(T obj, string filename)
        {
            //Serialize
            using (FileStream stream = File.Open(filename, FileMode.Create))
            {
                Serializer.Serialize(stream, obj);
            }
        }

public static T Deserialize<T>(string filename)
        {
            //Deserialize
            using (FileStream stream = File.Open(filename, FileMode.Open))
            {
                return Serializer.Deserialize<T>(stream);
            }
        }

Where T : List<Client>

Thank you

- Dan




On Thursday, June 28, 2012 1:51:14 PM UTC+1, Joel Carrier wrote:
>
> Yes it does.  Thanks.
>
> Where can I read more about this disabling of list-handling and its 
> effects?
>
> On Thu, Jun 28, 2012 at 8:31 AM, Marc Gravell 
> <marc.g...@gmail.com<javascript:>
> > wrote:
>
>> Well, until I get around to re-implementing it for v2, GetProto<T> will 
>> just make a quiet apology. But to answer your question, consider an example 
>> such as ItemList<Customer>
>>
>> Item<TItem> could be (I can't remember how v1 implements this) something 
>> like
>>
>>     message Item_Customer {
>>         optional Customer Item = 1;
>>     }
>>
>> On the subject of ItemList<TItem>  - unless you disable list-handling 
>> (separate topic), this will be treated *entirely* as just a List<TItem> - 
>> so no specific message is generated. As per my previous comment, such a 
>> list is then semantically identical to
>>
>>     message SomeWrapper {
>>          repeated Item_Customer Items = 1;
>>     }
>>
>> Make sense?
>>
>> Marc
>>
>> On 28 June 2012 13:24, Joel Carrier <jo...@joelcarrier.com 
>> <javascript:>>wrote:
>>
>>> 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 <jo...@joelcarrier.com<javascript:>
>>>> > 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 <farooqm...@gmail.com<javascript:>
>>>>>> > 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/**ms**g/protobuf/-/W0yySDcbES8J<https://groups.google.com/d/msg/protobuf/-/W0yySDcbES8J>
>>>>>>> .
>>>>>>> To post to this group, send email to 
>>>>>>> prot...@googlegroups.com<javascript:>
>>>>>>> .
>>>>>>> To unsubscribe from this group, send email to protobuf+u...@**
>>>>>>> googlegro**ups.com <javascript:>.
>>>>>>> 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<https://groups.google.com/d/msg/protobuf/-/2pcXp7q9LCcJ>
>>>>> .
>>>>>
>>>>> To post to this group, send email to prot...@googlegroups.com<javascript:>
>>>>> .
>>>>> To unsubscribe from this group, send email to protobuf+u...@**
>>>>> googlegroups.com <javascript:>.
>>>>> 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/-/SUzHf4_n0O4J.
>>>
>>> To post to this group, send email to prot...@googlegroups.com<javascript:>
>>> .
>>> To unsubscribe from this group, send email to 
>>> protobuf+u...@googlegroups.com <javascript:>.
>>> 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/-/WKcb-zQUieIJ.
To post to this group, send email to protobuf@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to