Odpowiedz

13

Specyficzny dla .NET, jeśli masz dwie aplikacje korzystające z tego samego systemu, możesz użyć serializacji binarnej. Z drugiej strony, jeśli masz aplikacje znajdujące się na różnych platformach, zalecamy użycie Serializacji XML. Więc jeśli piszę aplikację do czatu (klient i serwer), mogę użyć serializacji binarnej, ale jeśli później zdecyduję, że powinienem użyć Pythona do napisania klienta, to może nie.

+0

Jeśli włączysz Serializer kontraktu danych po wypowiedzeniu "serializacji xml", to zgadzam się z tobą. –

+0

Dziękuję bardzo za odpowiedź – Mahantesh

+6

@Mahantesh @ Adel - "binarny" nie jest tu problemem; Jest ** nie ** prawda, że ​​plik binarny nie jest interoperacyjny - po prostu: 'BinaryFormatter' (* specyficzny przykład * binarnego serializera) jest złym wyborem. Istnieje kilka innych. –

2

Jeśli chcesz mieć przyjazne dla użytkownika lub wieloplatformowe wyjście, użyj XML. Również serializacja XML korzysta z publicznych pól i właściwości do serializacji i można zmienić/sformatować dane wyjściowe przy użyciu atrybutów i niestandardowej serializacji na poziomie klasy, jeśli chcesz. Bin.Ser. korzysta z prywatnych pól do serializacji.

+0

Sigh; oh stare mity ... Aby zaprzeczać * obu * punktom; podczas gdy 'BinaryFormatter 'jest serializatorem terenowym, to ** nie ** jest jedynym serializatorem binarnym - większość innych jest znacznie lepiej zachowana - i podobnie,' DataContractSerializer' zapisuje xml, a * jeśli typ nie jest poprawnie adnotowany * działa jak * Serial * serializer. –

+0

DataContractSerializer, WCF? W tym pytaniu nie ma ani słowa na ten temat. – SeeSharp

+0

moim referencją jest "serializacja xml", która nie jest taka sama jak "XmlSerializer". "serializacja xml" jest po prostu kategoryzacją; 'XmlSerializer' jest specyficznym przykładem API do" serializacji xml ". 'DataContractSerializer' ** także ** wykonuje" serializację xml ". –

34

Obie istniejące odpowiedzi koncentrują się na "wieloplatformowości", ale to niezwiązany problem. Rzecz w tym, że robią to "nie używaj BinaryFormatter, jeśli robisz wiele platform" - co całkowicie popieram. Istnieje jednak szereg binarnych formatów serializacji, które są bardzo wiele międzyplatformowe - protobuf/ASN.1 jest pierwszorzędnymi przykładami.

Zobaczmy więc, co każdy ma do zaoferowania;

  • Binary jest zwykle mniejsze, zazwyczaj szybciej procesu (na obu końcach), i nie jest łatwo człowiek/edycji
  • formaty czytelnego tekstu (XML/JSON) wydają się być bardziej gadatliwy niż binarny (choć często kompresuje dobrze), ale są łatwe w obsłudze ręcznie; ale wszystko, przetwarzanie tekstu mapowanie sprawia, że ​​im wolniej
    • xml jest bardzo powszechne jest Web-usługi oraz korzyści z gooling wsparcia takich jak XSD, XSLT i solidna xml redaktorów
    • json jest głównym graczem w przeglądarce opartych comms (choć jest on również używany w internetowych usługach) - wydaje się być mniej formalny, ale nadal bardzo skuteczne

Wskazówki jak interoperacyjność ma ani siły, ani słabość albo, tak długo, jak wybrać odpowiedni format binarny!

Here's an answer porównuje czas serializacji, deserializację i metryki przestrzenne większości serializatorów .NET w celach informacyjnych.

+0

Ciekawe, jak znaleźć swoje stare odpowiedzi? Właśnie dzisiaj próbowałem wyśledzić jedną z moich ostatnich odpowiedzi na pewne powiązane pytanie i trudno mi było go znaleźć. –

+0

@ H.B. zwykle przez google, [na przykład] (http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=%2B%22ok+i'll+bite%22+%2Bgravell+site:stackoverflow.com) –

Powiązane problemy