using System.Collections.Generic;
using System.Diagnostics;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using System.Globalization;
using System.ComponentModel;
internal class ArrayHolder
CollectionOfBytes = new byte[0] { };
internal ArrayHolder(IEnumerable<byte> bytesToUse)
CollectionOfBytes = bytesToUse.ToArray();
public byte[] CollectionOfBytes { get; set; }
[ProtoMember(1, OverwriteList = true)]
if (CollectionOfBytes == null)
return new List<byte>(CollectionOfBytes);
CollectionOfBytes = value.ToArray();
internal class ListHolder
CollectionOfBytes = new List<byte>();
internal ListHolder(IEnumerable<byte> bytesToUse)
CollectionOfBytes = bytesToUse.ToList();
public List<byte> CollectionOfBytes { get; set; }
public static void Test()
Test(Enumerable.Range(0, 3 * byte.MaxValue).Select(i => unchecked((byte)i)).ToArray());
Console.WriteLine("Failure: ");
Console.WriteLine("Successfully round-tripped all possible byte values.");
private static void Test(byte [] values)
var test = new TestClass();
test.TestChangeListToArray(values);
test.TestChangeArrayToList(values);
test.TestListRoundTrip(values);
test.TestArrayRoundTrip(values);
public void TestListRoundTrip(IEnumerable<byte> values)
var a = new ListHolder(values);
var aCopy = Deserialize<ListHolder>(Serialize(a));
Assert.That(aCopy.CollectionOfBytes.SequenceEqual(a.CollectionOfBytes));
public void TestArrayRoundTrip(IEnumerable<byte> values)
var a = new ArrayHolder(values);
var aCopy = Deserialize<ArrayHolder>(Serialize(a));
Assert.That(aCopy.CollectionOfBytes.SequenceEqual(a.CollectionOfBytes));
public void TestChangeArrayToList(IEnumerable<byte> values)
var a = new ArrayHolder(values);
var aCopy = Deserialize<ListHolder>(Serialize(a));
Assert.That(aCopy.CollectionOfBytes.SequenceEqual(a.CollectionOfBytes));
public void TestChangeListToArray(IEnumerable<byte> values)
var a = new ListHolder(values);
var aCopy = Deserialize<ArrayHolder>(Serialize(a));
Assert.That(aCopy.CollectionOfBytes.SequenceEqual(a.CollectionOfBytes));
public static byte[] Serialize<T>(T obj)
using (var stream = new MemoryStream())
Serializer.Serialize(stream, obj);
public static T Deserialize<T>(byte[] buffer)
using (var stream = new MemoryStream(buffer))
return Serializer.Deserialize<T>(stream);
public static void Main()
Console.WriteLine("protobuf-net version: " + typeof(ProtoBuf.Serializer).Assembly.FullName);
ProtoBuf.Meta.RuntimeTypeModel.Default.AutoCompile = false;
public static class Assert
public static void That(bool val)
throw new InvalidOperationException();