using System; | |
using System.IO; | |
namespace Google.ProtocolBuffers.Examples.AddressBook | |
{ | |
internal class SampleUsage | |
{ | |
private 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!"); | |
} | |
} | |
} |