추상 클래스를 사용하여 WCF 용 DataContract로 정의하고 싶습니다. 다음 예제에서는 내 추상 클래스 UpperClass
을 정의하는 방법을 보여줍니다.WCF : 추상 클래스를 DataContract로 사용하는 방법
[DataContract(IsReference = true)]
[KnownType(typeof(SubClass1))]
[KnownType(typeof(SubClass2))]
abstract public class UpperClass
{
abstract public void update();
}
SubClass1
및 UpperClass
에서 SubClass2
상속합니다. 실제로 이들은 내부적으로 만 사용되는 update()
이라는 하나의 메서드 만 공유합니다 (DataMember 아님). 다음 코드 SubClass1
및 SubClass2
구현 보여준다
[DataContract]
public class SubClass1 : UpperClass
{
private int[] _val1;
private int[] _val2;
//internal constructor:
public SubClass1()
{
_val1 = new int[2];
_val2 = new int[2];
//initialize values of _val1 and _val2 ...
}
//internal update method
public override void update()
{
//here comes update formulas...
}
//enable simple access from WCF client:
[DataMember]
public int[] val1
{
get { return _val1; }
set { _val1 = value; }
}
[DataMember]
public int[] val2
{
get { return _val2; }
set { _val2 = value; }
}
}
[DataContract]
public class SubClass2 : UpperClass
{
private int[] _value1;
private int[] _value2;
//internal constructor:
public SubClass2()
{
_value1 = new int[12];
_value2 = new int[12];
}
// ...
, 난의 [OperationContract가 (참 IsInitiating = IsTerminating = 거짓)]으로 정의 된 다음의 코드를 사용하여 내 survice를 공급 그 인터페이스 클래스.
UpperClass DatSet = proxy.init("SubClass1");
나는이 줄의 끝으로 디버깅, DatSet
의 내용은 매우 이상한 같습니다 :
public UpperClass init(string s)
{
if (s.Equals("SubClass1"))
obj = new SubClass1();
else if (s.Equals("SubClass2"))
obj = new SubClass2();
return obj;
}
그리고 클라이언트 측에서
, 내 서비스를 사용하여 소비 (또는 초기화){} MyExternalLayer.IMyProcessingLayer_proxy.SubClass1 [MyExternalLayer.IMyProcessingLayer_proxy.SubClass1] {} MyExternalLayer.IMyProcessingLayer_proxy.SubClass1 ExtensionData : {System.Runtime.Serialization.ExtensionDataObject} extensionDataField : {System.Runtime.Serialization.ExtensionDataObject} 하여 PropertyChanged : 나는 WCF 서비스로 데이터 계약을 붙여 그들은 내가하지만, 잘 작동
예외 메시지는 무엇이라고 말합니까? – nvoigt
어쨌든 나는 예외를 없앴습니다. 미안하지만, 이유는 모르겠다. 그러나, 제 변수'DatSet'은 매우 이상한 내용을 가지고 있습니다. 'SubClass1'에 대한 deserialization이 예상대로 작동하지 않는 것 같습니다. – Boozzz
그것은 나에게 상당히 정상적인 것처럼 보입니다. 어쩌면 당신이 예상 한 것을 설명 할 수 있을까요? – nvoigt