Windows 양식에서 전화 번호부를 만들고 있는데, 데이터를 저장하기 위해 binaryForm에 ContactList를 작성해야합니다.오브젝트를 바이너리로 직렬화하는 방법은 무엇입니까?
가장 좋은 방법은 무엇입니까? 여러 필드를 별도로 작성해야합니까? 아니면 전체 개체로 쓰고 읽을 수 있습니까?
- 가이 ID
- 문자열 이름
- 문자열이 lastName
- 문자열 이메일
- 문자열 PHONENUMBER
Windows 양식에서 전화 번호부를 만들고 있는데, 데이터를 저장하기 위해 binaryForm에 ContactList를 작성해야합니다.오브젝트를 바이너리로 직렬화하는 방법은 무엇입니까?
가장 좋은 방법은 무엇입니까? 여러 필드를 별도로 작성해야합니까? 아니면 전체 개체로 쓰고 읽을 수 있습니까?
BinaryWriter
는 객체 직렬화를 제공하지 않습니다
연락이 필드가 있습니다. 원할 경우 이 자신 만의 직렬화 코드를 작성할 수 있지만 모든 작업을 수행해야합니다. 스트림에 대한 오버 헤드를 처리하고 일부 기본 인코딩을 처리합니다. 시나리오가 단순하다면, 그럴 수도 있고, 재미있을 수도 있습니다. 그러나 대부분의 경우이 유형의 코드를 전용 직렬화 라이브러리에 저장하려고 할 것입니다. 많은 경우에, 그것은 단지 json 또는 xml serializer를 사용하는 것을 의미합니다. 정말 바이너리를 원한다면, 역시 괜찮습니다. - BinaryFormatter
은 inbuilt이지만 버전/플랫폼에 관한은 입니다. 나는 그것을 추천 해 드릴 수 없습니다. protobuf-net
과 같은 다른 바이너리 시리얼 라이저는 사용하기 쉽고 효율적이며 다양한 플랫폼에서 작동합니다 (공개 : 저는 저자입니다 만 무료입니다 : 나는 아무것도 팔지 않습니다).
마크, 고맙습니다. 선생님에게 더 많은 질문이 생겼습니다. xml과 json은 아직 외국어입니다. 자세한 정보를 찾을 수 있습니다. BinarySerializer에 대해서 –
@GiorgiIsaiashvili 거기에는'XmlSerializer'의 예제가 많이 있습니다 - 단지 google; json.net에는 예제가 있습니다. "jil"에는 예제가 있습니다. protobuf-net에는 예제가 있습니다 - 모두 예제가 있습니다 –
클래스 (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
:
대단히 고맙습니다. 코드에서 많은 것을 배웠습니다.하지만 사용 속성은 없습니다. 더 간단한 방법이있을 수 있습니다. –
@GiorgiIsaiashvili 당신은 할 수 없습니다. '[Serializable]'속성을 사용하지 않고'BinaryWriter'를 사용하십시오. – user3185569
BinaryWriter는 BinaryFormatter가 아닙니다.이제는 SerializableAttribute가 필요하지 않습니다. BinaryWriter를 사용하도록 클래스를 선언 할 필요조차 없습니다. –
[이진 직렬화] (https://msdn.microsoft.com/en-us/library/72hyey7b (v = vs.110) .aspx) 또는 XML을 고려하십시오. –
BinaryFormatter 또는 XmlSerializer –
또는 다른 serializer입니다. 요즘에는'BinarySerializer'를 사용할 것을 권장하지 않지만 안전하고 신뢰할 수있는 바이너리 시리얼 라이저 나 텍스트 시리얼 라이저를 많이 사용합니다 - 보통 json - –