简而言之,我已经为我的WCF服务公开了一个REST-ful端点,如下所示:
<endpoint address="Rest" binding="webHttpBinding" behaviorConfiguration="web" contract="ServicesLayer.ServiceContract.IService" name="service-web" />
我已经将WebInvoke属性添加到服务接口上的所有方法,如下所示:
[WebInvoke]
[OperationContract]
Response GetStuff(RequestBase Request);
对于具有具体请求类型的方法,一切正常。但是对于任何具有抽象请求类型的方法,例如上面的 RequestBase 是抽象的方法,会返回以下错误:无法创建抽象类。
在调用RESTful时,如何强制此方法将请求解释为RequestBase的派生类型之一?
注意:我确实尝试从RequestBase类中删除'abstract'关键字,但它仍然被解释为RequestBase而不是其派生类之一,因此实际上并没有解决任何问题。
提前致谢。
答案 0 :(得分:1)
对于那些想知道它在JSON中的外观的人。就我而言,我需要添加架构字符串。
此示例假定您具有一个抽象的BasePersonCriteria和一个继承PersonNameCriteria
的{{1}}。我在BasePersonCriteria
上也有一个属性[KnownType(typeof(PersonNameCriteria))]
。
如果这是您的要求和条件:
BasePersonCriteria
这是JSON的外观:
[DataContract(Namespace = "http://schemas.stackoverflow.com/core/persons/2018/11/14/criterias")]
public class PersonNameCriteria : BasePersonCriteria
{
[DataMember]
public string Name { get; set; }
}
[DataContract(Namespace = "http://schemas.stackoverflow.com/core/persons/2018/11/14/criterias")]
[KnownType(typeof(PersonNameCriteria))]
public abstract class BaseAccountCriteria
{
}
[DataContract(Namespace = "http://schemas.stackoverflow.com/core/persons/2018/11/14/requests")]
public class GetPersonRequest
{
[DataMember(IsRequired = true)]
public BasePersonCriteria PersonCriteria { get; set; }
}
答案 1 :(得分:0)
结果我只需要在发送的json / xml请求中包含类型。一旦我添加了新的哪种类型来解释它。感谢