WCF는 "set"이없는 속성에서 질식합니다. 해결 방법이 있습니까?
서비스 메서드의 결과로 전달하는 클래스가 있으며 해당 클래스에는 가져 오기 전용 속성이 있습니다.
[DataContract]
public class ErrorBase
{
[DataMember]
public virtual string Message { get { return ""; } }
}
서비스 측면에서 예외가 발생합니다.
System.Runtime.Serialization.InvalidDataContractException : 'MyNamespace.ErrorBase'형식의 'Message'속성에 대한 설정된 메서드가 없습니다.
이 속성을 getter로만 가져야하며 사용자가 값을 할당하도록 허용 할 수 없습니다. 사용할 수있는 해결 방법이 있습니까? 아니면 추가 속성이 누락 되었습니까?
Message에 공용 getter를 제공하지만 보호 된 setter를 제공하여 하위 클래스 (및 속임수 때문에 DataContractSerializer) 만 값을 수정할 수 있도록합니다.
값을 업데이트 할 필요가없는 경우에도 WCFSerializer에서 setter를 사용하여 개체를 역 직렬화하고 값을 다시 설정합니다.
이것은 당신이 추구하는 것입니다 : WCF DataContracts
[DataMember(Name = "PropertyName")]
public string PropertyName
{
get
{
return "";
}
private set
{ }
}
getter 만있는 경우 속성을 직렬화해야하는 이유는 무엇입니까? 읽기 전용 속성에 대한 DataMember 특성을 제거 할 수있는 것처럼 보이며 serializer는 속성을 무시합니다.
당신은 "아무것도하지 않는"세터를 가질 수 없습니까 ??
[DataContract]
public class ErrorBase
{
[DataMember]
public virtual string Message
{
get { return ""; }
set { }
}
}
아니면 DataContract 시리얼 라이저도 그럴까요 ??
DataMember 속성이있는 속성에는 항상 설정이 필요합니다. DataContract 구성원은 항상 값을 할당 할 수 있으므로 클라이언트 응용 프로그램에서 simmilar 개체를 다시 작성해야합니다.
ASP.NET MVC에서이 문제가 발생했으며 JSON 출력 항목의 이름을 제어 할 수 있도록 DataContractSerializer를 사용하고 싶습니다. 결국 저는 serializer를 .NET을 통해 setter (DataContractSerializer가 지원하지 않음) 및 속성 이름 제어 (ASP.NET MVC의 기본 제공 JSON serializer가 지원하지 않음)가없는 속성을 지원하는 JSON.NET으로 전환했습니다 [JsonProperty(PropertyName = "myName")]
.
실행 가능한 옵션 인 ErrorBase
경우 기본 클래스로 사용하는 대신 다음과 같이 정의하십시오.
public interface IError
{
string Message
{
[OperationContract]
get;
// leave unattributed
set;
}
}
이제 setter가 존재하더라도 WCF 채널을 통해 클라이언트에 액세스 할 수 없으므로 마치 개인용 인 것처럼 보입니다.
참고 URL : https://stackoverflow.com/questions/2323277/wcf-chokes-on-properties-with-no-set-any-workaround
'development' 카테고리의 다른 글
getApplicationContext (), getBaseContext (), getApplication (), getParent () (0) | 2020.08.30 |
---|---|
새로운 요점 인터페이스를 사용하여 GitHub 요점에서 단일 파일을 삽입하려면 어떻게해야합니까? (0) | 2020.08.30 |
Android에서 위치 정확도는 어떻게 측정 되나요? (0) | 2020.08.30 |
pypi UserWarning : 알 수없는 배포 옵션 : 'install_requires' (0) | 2020.08.30 |
모듈… gradle에서 지원하지 않습니다. (0) | 2020.08.30 |