2009-03-30 3 views
2

응용 프로그램 코드를 난독 화하기 위해 직렬화를 사용하여 응용 프로그램 데이터를 저장할 수있게하려면 모든 serialize 된 멤버의 이름을 사용자 지정 serialization 이름에 매핑해야합니다. ISerableInterface를 구현하여이 작업을 수행 할 수 있음을 알고 있지만 MSDN에서는 OnDeserializedAttribute, OnSerializingAttribute, OnSerializedAttribute 및 OnDeserializingAttribute를 사용하여 직렬화를 제안합니다. 그래서 OnSerializingAttribute를 사용하여 멤버 이름을 바꾸고 싶습니다. 문제는 멤버가 serialize 된 이름을 명시 적으로 결정하는 방법을 찾을 수 없다는 것입니다..Net OnSerializingAttribute를 사용하여 변수 이름 바꾸기?

OnSerializingAttribute?를 사용하여 직렬화의 이름을 명시 적으로 정의 할 수 있습니까?

답변

1

사용자 지정 직렬화 및 ISerializable 인터페이스가 가장 효율적인 방법이라고 생각합니다. 샘플 here을 확인하십시오. 또한 here's 당신이 언급 한 ISerializable 및 직렬화 특성 모두에 대한 좋은 토론 스레드.

형식을 완전히 제어하려는 경우 사용자 지정 serializer를 사용해야하며 (de) serialization 흐름에 응답하려면 특성이 가장 좋습니다.

1

(편집 : 나는이 시대의 유용한 숫자 본 것 같은 blog entry로 이것을 쓰기로했다)

내가 했어 이것에 대한 사용 protobuf-net 전에 사용자; 이것은 구글의 고밀도 바이너리 "프로토콜 버퍼 (protocol buffers)"와이어 포맷을 사용한다.

  • 이름이 와이어에 노출되지는
  • 는 런타임시 클래스의 이름이 "a1v"

이 작품 "생년월일 (DateOfBirth)"입니다 여부는 중요하지 않습니다이 있음을 의미 멤버 (속성 또는 필드)에 정수 태그를 지정하여 - 예를 들면 :

[ProtoMember(4)] 
public DateTime DateOfBirth {get;set;} 
만 "4"직렬화에 사용되는

하지만 (중요)는 직렬화를 많이 유지 관리 할 필요가 없습니다 암호. 또한 리모컨을 사용해야하는 경우 ISerializable에 쉽게 연결할 수 있으며 원하는 경우 WCF 후크가 있습니다.

공개 : 나는 저자 해요, 그래서 편견 해요 -하지만 당신은 당신이 .NET4를 사용하는 경우를 살펴의 ;-p

+0

protobuf-net이 작업에 적합한 도구라고 생각합니다. 시험. 기존의 직렬화 데이터 파일과의 호환성은 분명히 깨질 것입니다. – phatoni

1

을함으로써 무엇을 잃거나하지 않도록 도구는 무료이며, .NET4.5에서는 속성 이름을 바꾸기 위해 자신의 DataContractResolver를 정의 할 수 있지만 [DataMember(...)] 속성에서 압축 된 이름을 사용하는 것이 더 간단합니다.

관련 문제