2011-11-23 2 views
9

protobuf-net을 사용하여 ReadOnlyCollection을 직렬화 및 비 직렬화하려고합니다. 그러나 protobuf-net이 List를 ReadOnlyCollection으로 캐스팅하려고 시도 할 때 deserialization 할 때 예외가 발생합니다.protobuf-net : ReadOnlyCollection을 deserialize하지 못했습니다.

 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은 serialize하려는 불변 개체의 일부이며 ReadOnlyCollection으로 유지하는 것이 좋습니다.

+0

오, 흥미 롭습니다. * 지금 당장 * "간단히 말해서 효과가 없을 것"이라고 말해야 하겠지만, 나는 그것을 작동 시켜서 * 만들 수있는 몇 가지 방법을 생각할 수 있습니다. 그래도 직렬화 해제 코어로 변경됩니다. protobuf-net에 기능 요청으로 기록 할 수 있습니다. –

+0

이 문제와 가능한 수정을 위해 [문제] (http://code.google.com/p/protobuf-net/issues/detail?id=254)를 추가했지만 문제 유형을 변경하는 것을 잊었습니다. 결함으로 나열됩니다. 도! – Mark

+0

나는 보았다. 감사. 나는 그것을 얻을 것이다. 그러나 protobuf-net은 나의 직업이 아니라는 것을 명심해라 - 그래서 그것을 적당히 들여다 보는데 며칠이 걸릴 것이다. –

답변

0

protobuf-net은 컬렉션을 List로만 deserialize한다고 생각합니다. 수 :

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