답변

13

.NET에만 해당 동일한 유형의 시스템을 사용하는 두 개의 응용 프로그램이있는 경우 이진 직렬화를 사용할 수 있습니다. 다른 플랫폼에있는 응용 프로그램을 사용하는 경우 XML 직렬화를 사용하는 것이 좋습니다. 따라서 채팅 애플리케이션 (클라이언트와 서버)을 작성하는 중이라면 바이너리 직렬화를 사용할 수도 있지만, 나중에 클라이언트를 작성하기 위해 파이썬을 사용해야한다고 결정하면 그렇지 않을 수도 있습니다.

+0

"xml serialization"이라고 할 때 Data Contract Serializer를 포함하면 동의합니다. –

+0

답변을 주셔서 대단히 감사합니다. – Mahantesh

+6

@Mahantesh @Adeel - "바이너리"는 문제가 아닙니다. 바이너리가 상호 운용 될 수 없다는 것은 사실이 아닙니다 ** 단순히'BinaryFormatter' (바이너리 시리얼 라이저의 특정 예 *)는 좋지 않습니다. 여러 가지가 있습니다. –

2

사용자 친화적이거나 플랫폼 간 출력을 원하면 XML을 사용하십시오. 또한 XML 직렬화는 공용 필드와 속성을 사용하여 serialize하고 속성을 사용하여 출력을 변경하거나 다시 포맷 할 수 있습니다. Bin.Ser. 비공개 필드를 사용하여 직렬화합니다.

+0

한숨; 오, 옛 신화 ... * 두 점 모두를 모순; 'BinaryFormatter'는 실제로 필드 시리얼 라이저이지만, ** 유일하지 않은 바이너리 시리얼 라이저입니다 - 대부분의 것들은 훨씬 더 잘 동작합니다 - 마찬가지로'DataContractSerializer'는 타입에 정확하게 주석이 달려 있지 않다면 *를 쓰고 * * 필드 * 시리얼 라이저. –

+0

DataContractSerializer, WCF? 이 질문에 대해서는 아무 말도하지 않습니다. – SeeSharp

+0

내 참조 거기에 "xml serialization", 같은 아니'XmlSerializer'. "xml serialization"은 단순히 범주입니다. 'XmlSerializer'는 "xml serialization"을위한 API의 구체적인 예입니다. 'DataContractSerializer' ** 또한 "xml serialization"을 수행합니다. –

34

기존 답변은 "크로스 플랫폼"에 중점을 두지 만 관련이없는 문제입니다. 그들이 만들고있는 요점은 "당신이 크로스 플랫폼을 수행한다면 BinaryFormatter을 사용하지 말라."- 전적으로 지원합니다. 그러나 매우 다양한 이진 직렬화 형식이 있습니다. 크로스 플랫폼 - protobuf/ASN.1이 가장 좋은 예입니다.

그래서 각각의 기능을 대신 살펴 보겠습니다.

  • 이진 (양쪽 끝) 일반적으로 빨리 처리하기 위해 일반적으로 작고, 종종 잘 압축 아니지만 쉽게 사람이 읽을 수/편집 가능한
  • 텍스트 형식 (XML/JSON)는 (바이너리보다 자세한 경향), 손으로 작업하기는 꽤 쉽습니다. 하지만 모든 텍스트 처리는 매핑은 그들에게 느린
    • XML은 매우 일반적인
    • JSON 같은 XSD, XSLT 및 강력한 XML 편집기로 지원을 gooling에서 웹 서비스 및 혜택을 것입니다 브라우저의 주요 선수 만드는 경향이 (그것은 또한 웹 서비스를 사용하고 있지만) 기반 COMMS -만큼 당신이 선택으로, 상호 운용성 강도도 하나의 약점도가 얼마나

주의 매우 효과적 아직 덜 공식적인하지만 경향이있다 적절한 이진 형식!

Here's an answer 대부분의 .NET 직렬 변환기의 직렬화 시간, 비 직렬화 및 공간 메트릭을 비교합니다.

+0

이상한 호기심, 어떻게 옛날 대답을 찾으십니까? 바로 오늘 나는 몇 가지 관련된 질문에 대한 나의 최근 답변 중 하나를 추적하려고 노력했는데 어려움을 겪었습니다. –

+0

@ H.B. 일반적으로 Google을 통해 [예 :] (http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=%2B%22ok+i'll+bite%22+%2Bgravell+site:stackoverflow.com) –

관련 문제