0

私は DataContract に、次のように定義されたオブジェクトのコレクションを持っています

Collection<BaseAbstractObject>

タイプClassAのいくつかの継承されたオブジェクトで埋めたいと思います。

Soap UI を使用してサービス メソッドへのそのようなリクエストを作成していますが、「抽象クラスを作成できません」というエラーが表示されます。

また、基本クラスを[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>

そして、これは私の 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 に他の属性を追加する必要がありますか?

4

1 に答える 1