나는 클라이언트 측에서 [DataContract]를 통해 사용할 수있게 만드는 서버 측 클래스가 있습니다. 이 클래스에는 속성을 통해 사용할 수 있도록하려는 읽기 전용 필드가 있습니다. 그러나 얻을 수없고 설정하지 않고도 [DataMember] 속성을 추가 할 수있는 것처럼 보이지 않기 때문에 그렇게 할 수 없습니다.WCF : 설정없이 읽기 전용 DataMember 속성 노출?
그래서 setter없이 [DataMember] 속성을 사용할 수 있습니까?
[DataContract]
class SomeClass
{
private readonly int _id;
public SomeClass() { .. }
[DataMember]
public int Id { get { return _id; } }
[DataMember]
public string SomeString { get; set; }
}
또는 용액은 [DataMember를] 필드로 사용한다 - (같은 예를 도시 here)? 이것도 시도해 보았지만, 그 필드가 읽기 전용인지 신경 쓰지 않는 것 같은데 ..?
편집 : 이렇게 해킹하여 읽기 전용 속성을 만들 수있는 유일한 방법입니까? (아니요 - 이것을하고 싶지 않습니다 ...)
[DataMember]
public int Id
{
get { return _id; }
private set { /* NOOP */ }
}
당신이 클라이언트 측에서 WCF를 사용한다면 NOOP 설정기에 대한 귀하의 생각은 올바르게 전달되지 않을 것입니다 :'DataContract' 직렬화에서 클래스는 생성자를 호출하지 않고 인스턴스화되고' DataMember' 속성은 serialization 할 때 해당 속성의 getter에서 반환 한 값을 전달합니다. 따라서 NOOP 설정자는 속성을 버려서 deserialization에 기본값으로 남겨 둡니다. 대신 실제로 작동하는 개인용 setter를 작성하거나 속성을 표시하는 대신 보조 변수를'DataMember'로 표시하십시오. –