1

ここにコードを入力.asvc Web サービスで動的型を送信したいと考えています。いくつかのプロパティを持つクラスが 1 つあります。このリストのクラスを含め、あらゆる種類のオブジェクトを送信したいと思います。クライアント側でキャストバックします。

SysResultつまり、常にタイプを使用したいということです。しかし、時には一緒List<Apple>に、時にはList<Orrange>

以下のように

    [Serializable]
    public class SysResult
    {
        public int CRCResult;
        public long CRCTransactionId;
        public bool CRCStatus;
        public string CRCMessage;
        public List<Anything> ListObject;
    }

object[]Array、などを使用しようとしましたがList<object>dynamicこのエラーが発生しています。「基になる接続が閉じられました: 接続が予期せず閉じられました。」

ところで、すべての非特定オブジェクト タイプ サービス参照クラスはobject[]タイプを表します。

  [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
        public object[] ListObject {
            get {
                return this.ListObjectField;
            }
            set {
                if ((object.ReferenceEquals(this.ListObjectField, value) != true)) {
                    this.ListObjectField = value;
                    this.RaisePropertyChanged("ListObject");
                }
            }
        }

動的型を送信する方法はありますか? それとも、私は何か完全に間違ったことをしようとしていますか?

前もって感謝します。

4

2 に答える 2

2

既知の型を返す必要があります。「オブジェクト」やインターフェースだけを返すことはできません。datacontract がない場合、wcf はクライアント上でオブジェクトをシリアル化する対象をどのように知るのでしょうか?

通常、クライアントとサービスの間でパラメーターと戻り値を渡す場合、両方のエンドポイントは、送信されるデータのすべてのデータ コントラクトを共有します。ただし、次の場合はこの限りではありません。

... 送信する情報の宣言型は Object です。すべての型は Object から継承され、実際に送信される型を事前に知ることはできないため、受信側のエンドポイントは、送信されるデータのデータ コントラクトを事前に判断できません。

http://msdn.microsoft.com/en-us/library/ms730167(v=vs.110).aspx

また

KnownTypes を使用して、インターフェイスとオブジェクトをマップできます。このリンクを見てください: WCF - 既知の型としてのオブジェクト -> 相互運用可能? WCF、インターフェイスの戻り値の型、および KnownTypes

于 2014-04-15T11:53:06.107 に答える