| 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!"); | |
| } | |
| } | |
| } |