2011-06-25 14 views
5

serializacji klasy z buforów-Net, to neet dostarczenie klasy i atrybutami Właściwość [ProtoContract] i [ProtoMember (n)] -, gdzie n oznacza liczbę 1,2,3, .., itpCzy w Protobuf-net możliwe jest serializowanie nieprzypisanych klas?

Appart od klonowania do lustrzanego odbicia klasy, czy można serializować/deserializować klasę, nad którą nie mamy kontroli?

Na przykład:

przy użyciu ProtoBuf;

  • Serializer.Serialize < Wyjątek > (OutputStream, wyjątek)

lub

  • Serializer.Serialize < Tuple < danych, wyjątek > > (OutputStream, dataWithPossibleException);

NB. say Dane [ProtoContract]/[ProtoMember] i inne nie.

możliwe podejścia:

  • Byłoby miło, gdybyśmy mieli „atrybuty rozszerzenie”, które działały jak metod rozszerzenie. [niemożliwe]
  • replikować klasę lokalnie, a następnie kopiować do/z obiektu przed serializowaniem/deserializacją [to by działało, ale wydajność spadnie]
  • wygenerować zewnętrzny plik/definicję protokołu dla klasy i zapisać go w zasoby? [Ktoś wie, jak go o to?]

Odpowiedz

3

Istnieją opcje v2 tutaj:

  • można skonfigurować RuntimeTypeModel informując go o rodzaju i członków bez potrzeby żadnych atrybutów
  • dla typów, które są niewygodne, zastępczym może być dostarczony do serializacji łatwiejsze (musi mieć operatorów konwersji do/z oryginalnego typu)
  • dla API gdy typy nie są statyczne wpisany, istnieje możliwość zawarcia typu metadane

Sądzę, że niektóre z nich odnoszą się do niektórych z twoich punktów. Jeśli potrafisz w pełni sprecyzować scenariusz, który jest problematyczny, mogę być bardziej konkretny (lub wymyślić nowe sposoby torturowania kodu, aby działał).

Ale aby odpowiedzieć na główne pytanie (nieoznaczone): tak, w v2

+0

Dzięki za przewidywanie tej potrzeby! Wziąłem teraz opcję zastępczą, ponieważ dekompilowałem małe klasy szkieletowe i umieściłem je w moim zespole. Najczęściej staram się trzymać POCO, więc takie jednorazowe nie jest wielkim problemem. Sprawdzę nowe opcje wersji 2. – sgtz

+0

@ sgtz Metoda SetSurrogate powinna sprawić, że będzie bardziej bezpośrednia i wygodna –

+0

btw: Miałem nieco starszą wersję v2. Więc trafiłem aktualizację na svn, a teraz mogę Serializować/Deserializować >. Musiałem też usunąć + odczytany plik binarny protobuf-net. Nie jestem pewien, o co w tym wszystkim chodzi, ale teraz działa dobrze.Dziękuję za udostępnienie tego projektu ... a także dzięki Google. Powinienem wspomnieć, że w tym momencie * nadal * używam mojej kopii Tuple, a nie tej w przestrzeni nazw Systemu. – sgtz

Powiązane problemy