在我的服务器端,我有以下结构 -
[DataContract]
[KnownType(typeof(Derived1))]
[KnownType(typeof(Derived2))]
public class Base
{
}
[DataContract]
public class Derived1 : Base
{
[DataMember]
public string Prop1 {get;set;}
[DataMember]
public string Prop2 {get;set;}
}
[DataContract]
public class Derived2 : Base
{
[DataMember]
public string Prop3 {get;set;}
[DataMember]
public string Prop4 {get;set;}
[DataMember]
public string Prop5 {get;set;}
}
[DataContract]
public class SuperClass
{
[DataMember]
public List<Base> ListBase;
}
[OperationContract(Method="POST")]
public void SomeName(SuperClass superObj);
在客户端,我对一个以SuperClass
对象作为参数的操作合约进行AJAX调用。
var dataObj = { ListBase : [{"Prop1":"This is","Prop2":"First Derived Class"},
{"Prop3":"This is","Prop4":"Second","Prop5":"Derived Class"}
]
};
$.ajax({
url : 'MyProperlyConstructedServiceUrlAsSpecifiedInTheOperationContract'
data : JSON.stringify(dataObj),
method : "POST",
contentType:'application/json'
});
现在,在客户端构建我的JSON对象时,我会在Derived1
中传递Derived2
和List<Base>
的对象。
我得到的错误是&#34;无法将Type Base的对象转换为Derived1&#34;类型的对象。
服务器端的OperationContract有没有办法知道&#39;哪个Derived对象要转换成?它甚至可能吗? (对我来说似乎不合逻辑,但我无法完全理解基本概念......太多的阅读让我感到困惑!)
在这种情况下,设计方法应该是什么?我应该特别针对这种情况阅读的任何示例或任何概念?