using System.Collections.Generic;
using System.Runtime.Serialization;
using KGySoft.Serialization.Binary;
public enum MyEnum {FIRST, SECOND}
private protected Dictionary<MyEnum,Vector2[]> dict = new();
public MyClass Add(MyEnum key, params Vector2[] values)
public class MyClassCustom : MyClass, ISerializable
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
info.AddValue("keys", dict.Keys.Select(k => (int)k).ToArray());
info.AddValue("values", dict.Values.ToArray());
private MyClassCustom(SerializationInfo info, StreamingContext context)
var keys = (int[])info.GetValue("keys", typeof(int[]));
var values = (Vector2[][])info.GetValue("values", typeof(Vector2[][]));
for (int i = 0; i < keys.Length; i++)
Add((MyEnum)keys[i], values[i]);
public MyClassCustom() { }
public static void Main()
using (var stream = new MemoryStream())
var myClass = new MyClass()
.Add(MyEnum.FIRST, new (1, 1), new (2, 2))
.Add(MyEnum.SECOND, new (3, 3), new (4, 4));
var serializer = new BinarySerializationFormatter();
serializer.SerializeToStream(stream, myClass);
Console.WriteLine($"Default case length: {stream.Length}");
var clone = serializer.DeserializeFromStream<MyClass>(stream, expectedCustomTypes: typeof(MyEnum));
using (var stream = new MemoryStream())
var myClass = new MyClassCustom()
.Add(MyEnum.FIRST, new (1, 1), new (2, 2))
.Add(MyEnum.SECOND, new (3, 3), new (4, 4));
var serializer = new BinarySerializationFormatter();
serializer.SerializeToStream(stream, myClass);
Console.WriteLine($"Custom case length: {stream.Length}");
var clone = serializer.DeserializeFromStream<MyClassCustom>(stream);