Protobuf-net Generics on Unity3D IL2CPP.

When using Protobuf-net in Unity3D, if your Proto-Contracts include generics you might run into a few issues like Unable to resolve MapDecorator constructor.

I had to work with the following contract. It was s custom collection class which had a functionality of caching removed elements in the collection.

[ProtoContract]
public class CustomCollectionBase<TCollection, TElement, TKey{
	[ProtoMember(1)]
	protected TCollection _collection;

	[ProtoMember(2)]
	protected SortedDictionary<TKey, bool_removed;

	public CustomCollectionBase(TCollection collection)
	{
		_collection = collection;
	}
}

[ProtoContract]
public class CustomList<TElement: CustomCollectionBase<List<TElement, TElement, int{
	public CustomList() : base( new List<TElement())
	{
	}
}

[ProtoContract]
public class CustomIntDictionary<TElement: CustomCollectionBase<Dictionary<int, 

JSON vs Protobuf

I did a few tests to compare the data payload sizes of different serialization methods on .NET client server communications.

The test was basically to execute a request/response 20 times.

Request

[Serializable]
[ProtoContract]
public class GetRatingRequest
{
        [ProtoMember(1)]
        public int Rating;
        [ProtoMember(2)]
        public int Count;
        [ProtoMember(3)]
        public float A;
        [ProtoMember(4)]
        public float B;
        [ProtoMember(5)]
        public float C;
        [ProtoMember(6)]
        public float D;
        [ProtoMember(7)]
        public float E;
}

Response

[Serializable]
[ProtoContract]
public class GetRatingResponse
{
        [ProtoMember(1)]
        public List<RatingRatings;
}

[Serializable]
[ProtoContract]
public class Rating
{
        [ProtoMember(1)]
        public bool HighRating { get; set; }
        [ProtoMember(2)]
        public RatingDetail Details { get; set; }