2009-01-31 2 views
1

직렬화에 문제가 있습니다. 문제의 클래스는, 네트워크 패킷을 나타내, 페이로드에 관련한 바이트 배열을 가지고있어 null 일 가능성이 있습니다.속성으로 노출되지 않는 직렬화 상태

기괴한 누화를 방지하기 위해 배열을 읽고 쓰는 데 참조를 전달하지 않고 복사하기 때문에 Microsoft Framework 설계 지침의 권장 사항에 따라 GetData 및 SetData 메서드를 사용하여이를 노출했습니다. 가이드 라인은 객체 생성과 같은 중요한 효과가있을 때 Get/Set을 제안합니다. 그게 내가 한 일입니다.

불행히도 내부 멤버가 일련 화되지 않은 결과가 발생했습니다. 회원은 로 표시되어 있습니다. 공용 속성으로 공개하는 것 외에도 객체가 웹 서비스에 의해 서버에서 클라이언트로 전달 될 때이를 어떻게 직렬화 할 수 있습니까?

답변

3

(편집 : 웹 사용 가정, 프로토콜 원래의 질문에 명확하지)

당신은 WCF를 사용할 수 있습니까? DataContractSerializer은 비공개 회원을 지원

[DataContract] 
class Foo { 
    [DataMember] // can also be used on a field - not just properties 
    private int Bar {get;set;} // or internal or protected 
} 

그렇지 않다면, 당신은 단순히 DTO를 고려하고, 재산을 공개해야합니다.

기타 옵션 - 바이너리 직렬화? BinaryFormatter는 플랫폼간에 이식 할 수 없으므로 (모든 웹 서비스에 이상적인 것은 아닙니다), protocol buffers 같은 것들이 더 친숙합니다. 그러나 이것에 대한 WDSL 지원이나 IPC 스택 (원시 데이터 만)은 없습니다.

+0

그렇게 할 수 있습니까? (개인 회원에 DataMember 넣기) 나는 그것을 시험해보기 위해 준비하고 있었다! - 그리고 그것은 작동합니다! 만세! 당신은 점수를 얻습니다! –

관련 문제