2016-06-29 4 views
-1

Windows 양식에서 전화 번호부를 만들고 있는데, 데이터를 저장하기 위해 binaryForm에 ContactList를 작성해야합니다.오브젝트를 바이너리로 직렬화하는 방법은 무엇입니까?

가장 좋은 방법은 무엇입니까? 여러 필드를 별도로 작성해야합니까? 아니면 전체 개체로 쓰고 읽을 수 있습니까?

  • 가이 ID
  • 문자열 이름
  • 문자열이 lastName
  • 문자열 이메일
  • 문자열 PHONENUMBER
+0

[이진 직렬화] (https://msdn.microsoft.com/en-us/library/72hyey7b (v = vs.110) .aspx) 또는 XML을 고려하십시오. –

+0

BinaryFormatter 또는 XmlSerializer –

+0

또는 다른 serializer입니다. 요즘에는'BinarySerializer'를 사용할 것을 권장하지 않지만 안전하고 신뢰할 수있는 바이너리 시리얼 라이저 나 텍스트 시리얼 라이저를 많이 사용합니다 - 보통 json - –

답변

1

BinaryWriter는 객체 직렬화를 제공하지 않습니다

연락이 필드가 있습니다. 원할 경우 이 자신 만의 직렬화 코드를 작성할 수 있지만 모든 작업을 수행해야합니다. 스트림에 대한 오버 헤드를 처리하고 일부 기본 인코딩을 처리합니다. 시나리오가 단순하다면, 그럴 수도 있고, 재미있을 수도 있습니다. 그러나 대부분의 경우이 유형의 코드를 전용 직렬화 라이브러리에 저장하려고 할 것입니다. 많은 경우에, 그것은 단지 json 또는 xml serializer를 사용하는 것을 의미합니다. 정말 바이너리를 원한다면, 역시 괜찮습니다. - BinaryFormatter은 inbuilt이지만 버전/플랫폼에 관한은 입니다. 나는 그것을 추천 해 드릴 수 없습니다. protobuf-net과 같은 다른 바이너리 시리얼 라이저는 사용하기 쉽고 효율적이며 다양한 플랫폼에서 작동합니다 (공개 : 저는 저자입니다 만 무료입니다 : 나는 아무것도 팔지 않습니다).

+0

마크, 고맙습니다. 선생님에게 더 많은 질문이 생겼습니다. xml과 json은 아직 외국어입니다. 자세한 정보를 찾을 수 있습니다. BinarySerializer에 대해서 –

+0

@GiorgiIsaiashvili 거기에는'XmlSerializer'의 예제가 많이 있습니다 - 단지 google; json.net에는 예제가 있습니다. "jil"에는 예제가 있습니다. protobuf-net에는 예제가 있습니다 - 모두 예제가 있습니다 –

1

클래스 (Serializable을해야합니다) :

[Serializable] 
public class someType 
{ 
    public int X { set; get; } 
    public int Y { set; get; } 
} 

진 작가 사용 :

public static byte[] Serialize(someType obj) 
{ 
    byte[] bytes = null; 

    using (var stream = new MemoryStream()) 
    { 
     using (var writer = new BinaryWriter(stream)) 
     { 
      writer.Write(obj.X); 
      writer.Write(obj.Y); 
     } 

     bytes = stream.ToArray(); 
    } 

    return bytes; 
} 

public static someType Deserialize(byte[] data) 
{ 
    var obj = new someType(); 

    using (var stream = new MemoryStream(data)) 
    { 
     using (var reader = new BinaryReader(stream)) 
     { 
      obj.X = reader.ReadInt32(); 
      obj.Y = reader.ReadInt32(); 
     } 
    } 

    return obj; 
} 

사용법 :

var obj = new someType() { X = 10 }; 

byte[] data = Serialize(obj); 

someType obj2 = Deserialize(data); 

또는 BinaryFormatter :

+0

대단히 고맙습니다. 코드에서 많은 것을 배웠습니다.하지만 사용 속성은 없습니다. 더 간단한 방법이있을 수 있습니다. –

+0

@GiorgiIsaiashvili 당신은 할 수 없습니다. '[Serializable]'속성을 사용하지 않고'BinaryWriter'를 사용하십시오. – user3185569

+1

BinaryWriter는 BinaryFormatter가 아닙니다.이제는 SerializableAttribute가 필요하지 않습니다. BinaryWriter를 사용하도록 클래스를 선언 할 필요조차 없습니다. –

관련 문제