Skip to content

Instantly share code, notes, and snippets.

@turbo
Created August 27, 2018 12:02
Show Gist options
  • Save turbo/e2c8f5fc100345e3e160ed1c479f720e to your computer and use it in GitHub Desktop.
Save turbo/e2c8f5fc100345e3e160ed1c479f720e to your computer and use it in GitHub Desktop.
Ultra-simple Protobuf-net Example

Packages

  • protobuf-net 2.3.17
  • Jil 2.16.0
  • JetBrains.Annotations 2018.2.1

Code

using System;
using System.Collections.Generic;
using System.IO;
using JetBrains.Annotations;
using Jil;
using ProtoBuf;

namespace Demo
{
    [ProtoContract]
    [PublicAPI]
    public class Sketch
    {
        [ProtoMember(1)] public string Title;
        [ProtoMember(2)] public List<string> Actors;
        [ProtoMember(3)] public DateTime ReleaseDate;
    }
    
    internal class Program
    {
        public static void Main(string[] args)
        {
            // Test data
            var data = new Sketch
            {
                Title = "Mückentötolin",
                Actors = new List<string>
                {
                    "Rolf Herricht",
                    "Hans-Joachim Preil"
                },
                ReleaseDate = new DateTime(1957, 1, 2)
            };
            
            // JSON
            Console.WriteLine(JSON.Serialize(data));

            // Serialize
            var buf = new MemoryStream();
            Serializer.Serialize(buf, data);

            // Send to server
            var packet = Convert.ToBase64String(buf.ToArray());
            
            // Decode
            var dataDecoded = Serializer.Deserialize<Sketch>(
                new MemoryStream(Convert.FromBase64String(packet))
            );
            
            // JSON
            Console.WriteLine(JSON.Serialize(dataDecoded));
        }
    }
}

Output

{"ReleaseDate":"\/Date(-410144400000)\/","Actors":["Rolf Herricht","Hans-Joachim Preil"],"Title":"Mückentötolin"}
{"ReleaseDate":"\/Date(-410144400000)\/","Actors":["Rolf Herricht","Hans-Joachim Preil"],"Title":"Mückentötolin"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment