2011-11-23 2 views
9

Я пытаюсь сериализовать и десериализовать ReadOnlyCollection, используя protobuf-net. Однако исключение выбрасывается при десериализации, когда protobuf-net пытается передать список в ReadOnlyCollection.protobuf-net: Не удалось десериализовать ReadOnlyCollection

 var roc = new ReadOnlyCollection<byte>(new byte[] {1, 2, 3}); 
     var ms = new MemoryStream(); 

     Serializer.Serialize(ms, roc); 
     ms.Position = 0; 
     var roc2 = Serializer.Deserialize<ReadOnlyCollection<byte>>(ms); 

     Console.WriteLine(BitConverter.ToString(roc2.ToArray())); 

Есть ли способ сохранить это как ReadOnlyCollection, а не сериализации/десериализации как List? В фактическом приложении ReadOnlyCollection является частью неизменяемого объекта, который я хочу сериализовать, и предпочел бы сохранить его как ReadOnlyCollection.

+0

О, это интригующе. * прямо сейчас * Я бы сказал просто «нет, что не сработает», но я могу придумать несколько способов, которые я мог бы настроить, чтобы * сделать * это сработало. Однако это будет изменение ядра десериализации. Возможно, вы захотите зарегистрировать это как запрос функции на protobuf-net. –

+0

Я добавил [вопрос] (http://code.google.com/p/protobuf-net/issues/detail?id=254) для этого и возможного исправления, но я забыл изменить тип проблемы, чтобы перечисленных как дефект. Doh! – Mark

+0

Я видел. Благодарю. Я доберусь до него, но, пожалуйста, имейте в виду, что protobuf-net - это не моя дневная работа, так что может потребоваться несколько дней, чтобы правильно взглянуть на нее. –

ответ

0

Я думаю, что protobuf-net только deserialize коллекции как List. Вы можете:

var roc2aux = Serializer.Deserialize<List<byte>>(ms); 
var roc2 = new ReadOnlyCollection<byte>(roc2aux); 
Console.WriteLine(BitConverter.ToString(roc2.ToArray())); 

 Смежные вопросы

  • Нет связанных вопросов^_^