2010-12-28 9 views
0

"DataContract"및 "Serializable"속성이있는 클래스가 있습니다. 이 클래스는 서비스에서 사용되고 있습니다. 이 서비스는 프로젝트에서 사용 중입니다. VS의 "서비스 참조 추가"기능을 사용하여 프로젝트의 서비스 참조를 추가했습니다 (참조 - 추가 참조 정보를 마우스 오른쪽 단추로 클릭). 서비스 참조를 추가 할 때마다 서비스 참조의 Reference.cs 파일에 클래스의 중복 속성이 만들어지며, 1은 "DataMember"속성과 "Serializable"속성으로 구성됩니다. 이로 인해 빌드 오류가 발생했습니다. Serializable 특성을 넣지 않으면 "DataMember"특성을 가진 클래스의 속성 집합 1 개만 있으면 서비스 참조가 올바르게 작동합니다."DataContract"및 "Serializable"속성을 가진 클래스에 대해 만들어진 중복 속성

왜 이런 일이 발생하며이를 피하기 위해 무엇을 할 수 있습니까? 클래스에 두 속성이 모두 필요합니다. 즉, 속성을 제거 할 수 없습니다.

답변

1

두 속성이 모두 필요한 이유를 설명 할 수 있습니까?

DataContractSerializerSerializable 속성과 잘 작동합니다.

그러나 BinaryFormattor이 작동하려면 Serializable 속성이 필요합니다.

DataContract 속성을 제거하는 방법을 찾아보십시오.

--EDIT--

WCF은 채널을 통해 객체를 직렬화하고/역 직렬화 기본적으로 DataContractSerializer을 사용합니다. WCF가 작동하려면 MSDN 문서,

DataContractSerializer Class

// You must apply a DataContractAttribute or SerializableAttribute 
// to a class to have it serialized by the DataContractSerializer. 

그래서 @에 따르면, 당신은 DataContract의 제거 할 수 있습니다.

+0

WCF 서비스에서 사용할 수 있도록 "Serializable"특성을 사용하여 개체의 심층 복제를 만들고 "DataContract"특성이 필요합니다. "DataContract"특성을 제거 할 수있는 방법을 제안 해 주시겠습니까? 내가 아는 한 "DataContract"특성이없는 클래스를 사용하여 WCF 서비스에서 데이터를 전송할 수 없습니다. – samar

+0

저는 여기서 제 동료들과 토론을했으며, "Serializable"속성을 유지하면 성능이 저하되고 웹 서비스만큼 좋게 될 것이라고 말하고 있습니다. 또한 몇 가지 유형의 직렬화 속성이 없다는 문제가 있습니다. 또한 속성의 "DataMember"속성은 클래스의 "Serializable"속성과 함께 작동하지 않습니다. 또한 속성을 "Serializable"로 표시해야합니다. 이게 다 맞니? – samar

0

@Samar DataContract 특성을 사용하는 것이 가장 좋은 방법은 내부적으로 (기본적으로) Serializable 특성을 그림으로 가져 오는 것입니다.

+0

나는 그 일을 시도했다. 그러나 나는 단지 DataContract 애트리뷰트를 유지할 때 클래스의 딥 카피를 생성 할 수 없다. 깊은 복사본을 만드는 것은 클래스를 직렬화 가능으로 표시해야한다는 것을 알고 있어야하며, 깊은 복사본을 만들려고 할 때 .net은 클래스를 DataContract로 클래스에 표시 했더라도 클래스가 직렬화되지 않는다고 말합니다. 어떤 이유로 그런 식으로 행동하는거야? – samar

관련 문제