aboutsummaryrefslogblamecommitdiff
path: root/src/AddressBook/SampleUsage.cs
blob: ae7b6802d2f19b76ac27c443246d2403f4860777 (plain) (tree)











































                                                                                     
using System;
using System.IO;

namespace Google.ProtocolBuffers.Examples.AddressBook
{
    class SampleUsage
{
    static void Main()
    {
        byte[] bytes;
        //Create a builder to start building a message
        Person.Builder newContact = Person.CreateBuilder();
        //Set the primitive properties
        newContact.SetId(1)
                  .SetName("Foo")
                  .SetEmail("foo@bar");
        //Now add an item to a list (repeating) field
        newContact.AddPhone(
            //Create the child message inline
            Person.Types.PhoneNumber.CreateBuilder().SetNumber("555-1212").Build()
            );
        //Now build the final message:
        Person person = newContact.Build();
        //The builder is no longer valid (at least not now, scheduled for 2.4):
        newContact = null;
        using(MemoryStream stream = new MemoryStream())
        {
            //Save the person to a stream
            person.WriteTo(stream);
            bytes = stream.ToArray();
        }
        //Create another builder, merge the byte[], and build the message:
        Person copy = Person.CreateBuilder().MergeFrom(bytes).Build();

        //A more streamlined approach might look like this:
        bytes = AddressBook.CreateBuilder().AddPerson(copy).Build().ToByteArray();
        //And read the address book back again
        AddressBook restored = AddressBook.CreateBuilder().MergeFrom(bytes).Build();
        //The message performs a deep-comparison on equality:
        if(restored.PersonCount != 1 || !person.Equals(restored.PersonList[0]))
            throw new ApplicationException("There is a bad person in here!");
    }
}
}