У меня есть некоторые проблемы с сериализацией общих коллекций с помощью protobuf-net.Классы определены следующим образом:
[ProtoContract]
public class DOPerson
{
public DOPerson() { }
[ProtoMember(1)]
public string FirstName { get; set; }
[ProtoMember(2)]
public string Surname { get; set; }
}
[ProtoContract]
public class DOPersonCollection : DOCollection<DOPerson>
{
public DOPersonCollection() : base() { }
}
[ProtoContract]
public abstract class DOCollection<T> : BindingList<T>
{
public DOCollection() { }
[ProtoMember(100)]
public Guid CollectionGuid { get; set; }
}
Для проверки сериализации у меня есть следующая основная функция:
class Program
{
static void Main(string[] args)
{
DOPerson personOne = new DOPerson() { FirstName = "One", Surname = "Person" };
DOPerson personTwo = new DOPerson() { FirstName = "Two", Surname = "Person" };
DOPerson personThree = new DOPerson() { FirstName = "Three", Surname = "Person" };
DOPersonCollection personCollection1 = new DOPersonCollection();
personCollection1.CollectionGuid = Guid.NewGuid();
personCollection1.Add(personOne);
personCollection1.Add(personTwo);
personCollection1.Add(personThree);
// Searialize the Collection
MemoryStream memBuffer = new MemoryStream();
Serializer.Serialize(memBuffer, personCollection1);
// Deserialize the Collction
memBuffer.Position = 0;
DOPersonCollection personCollection2 = Serializer.Deserialize<DOPersonCollection>(memBuffer);
Console.WriteLine(string.Format("Person Collection 1 GUID : {0}", personCollection1.CollectionGuid.ToString()));
Console.WriteLine(string.Format("Person Collection 1 Count: {0}", personCollection1.Count));
Console.WriteLine("");
Console.WriteLine(string.Format("Person Collection 2 GUID : {0}", personCollection2.CollectionGuid.ToString()));
Console.WriteLine(string.Format("Person Collection 2 Count: {0}", personCollection2.Count));
Console.ReadLine();
}
}
Получены следующие результаты:
ЧеловекИдентификатор GUID коллекции 1: db4ff817-db79-4588-98af-d730800add2e Счет 1 коллекции людей: 3
Идентификатор GUID коллекции 2: 00000000-0000-0000-0000-000000000000 Количество людей 2: 0
Первая сериализация создает пустой буфер, и поэтому второй раз создает и очищает объект коллекции.Есть ли механизм для правильной обработки сценариев такого рода для получения необходимых результатов сериализации?