C# wcf服务中的抽象对象集合定义
我的DataContract中有一个对象集合,定义为C# wcf服务中的抽象对象集合定义,c#,wcf,soapui,datacontract,C#,Wcf,Soapui,Datacontract,我的DataContract中有一个对象集合,定义为 Collection<BaseAbstractObject> 收藏 我想用ClassA类型的继承对象填充它 我正在使用SOAPUI创建这样一个对我的服务方法的请求,但我将得到错误“无法创建抽象类” 我还用[KnownType(ClassA)]属性修饰基类。我的xml请求如下所示: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelo
Collection<BaseAbstractObject>
收藏
我想用ClassA类型的继承对象填充它
我正在使用SOAPUI创建这样一个对我的服务方法的请求,但我将得到错误“无法创建抽象类”
我还用[KnownType(ClassA)]属性修饰基类。我的xml请求如下所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:wcf="http://schemas.datacontract.org/2004/07/WcfService1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<tem:GetDataUsingDataContract>
<tem:composite>
<wcf:ClassesCollection>
<wcf:BaseClass i:type="ClassA" >
<wcf:Id>1</wcf:Id>
<wcf:Name>ClassA</wcf:Name>
</wcf:BaseClass>
</wcf:ClassesCollection>
</tem:composite>
</tem:GetDataUsingDataContract>
</soapenv:Body>
</soapenv:Envelope>
1.
甲级
这就是我的DataContracts的样子:
[DataContract]
public class MyDataContract
{
public MyDataContract()
{
ClassesCollection = new Collection<BaseClass>();
}
[DataMember]
public Collection<BaseClass> ClassesCollection { get; private set; }
}
[DataContract]
[KnownType(typeof(ClassA))]
public abstract class BaseClass
{
[DataMember]
public int Id { get; set; }
}
[DataContract]
public class ClassA : BaseClass
{
[DataMember]
public int Name { get; set; }
}
[DataContract]
公共类MyDataContract
{
公共MyDataContract()
{
ClassesCollection=新集合();
}
[数据成员]
公共集合类集合{get;private set;}
}
[数据合同]
[知识类型(类别A))]
公共抽象类基类
{
[数据成员]
公共int Id{get;set;}
}
[数据合同]
公共类ClassA:基类
{
[数据成员]
公共int名称{get;set;}
}
那么我的请求应该是什么样的呢?或者需要向DataContract添加其他属性吗?首先确保集合具有公共setter,否则WCF将无法对其进行反序列化:
[DataMember]
public Collection<BaseClass> ClassesCollection { get; set; }
[DataMember]
公共集合类集合{get;set;}
下面是一个示例请求的样子:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetDataUsingDataContract xmlns="http://tempuri.org/">
<composite xmlns:a="http://schemas.datacontract.org/2004/07/WcfService1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:ClassesCollection>
<a:BaseClass i:type="a:ClassA">
<a:Id>1</a:Id>
<a:Name>5</a:Name>
</a:BaseClass>
</a:ClassesCollection>
</composite>
</GetDataUsingDataContract>
</s:Body>
</s:Envelope>
1.
5.
谢谢,在这种情况下不需要专用setter,但问题在于Type参数中的前缀“a”。