休息呼叫"无法将类型基础转换为类派生"

时间:2014-09-23 00:01:13

标签: c# wcf oop inheritance serialization

在我的服务器端,我有以下结构 -

[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中传递Derived2List<Base>的对象。

我得到的错误是&#34;无法将Type Base的对象转换为Derived1&#34;类型的对象。

服务器端的OperationContract有没有办法知道&#39;哪个Derived对象要转换成?它甚至可能吗? (对我来说似乎不合逻辑,但我无法完全理解基本概念......太多的阅读让我感到困惑!)

在这种情况下,设计方法应该是什么?我应该特别针对这种情况阅读的任何示例或任何概念?

0 个答案:

没有答案