バイナリのシリアル化に protobuf-net を使用しています。Class Aをシリアライズ中に OutOfMemory を取得しています。BinaryFormatter を使用すると、同じオブジェクトが適切にシリアル化されます。
以下はクラスの例です:
[ProtoContract]
class A:
[ProtoMember(1, DataFormat = DataFormat.Group)]
B[] Array1 {get; set;}
....
class B:
[ProtoMember(1)]
string Field1 {get; set;}
[ProtoMember(2)]
string Field1 {get; set;}
[ProtoMember(3, DataFormat = DataFormat.Group)]
C[] Array2 {get; set;} // 20000 elements
....
class C:
[ProtoMember(1)]
string Field1 {get; set;}
[ProtoMember(2)]
string Field1 {get; set;}