11

SQLServer セッション変数にシリアル化し、WCF サービスで使用できるようにする必要があるクラスがあります。以下のように宣言しました

namespace MyNM
{
[Serializable] 
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]

public class Foo : IEntity, ISafeCopy<Foo>
{
    [DataMember(Order = 0)] 
    public virtual Guid Id { get; set; }

    [DataMember(Order = 1)] 
    public virtual string a { get; set; }

    DataMember(Order = 2)]
    public virtual Bar c { get; set; }

    /* ISafeCopy implementation */
}


[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy<Bar>
{
    #region Implementation of IEntity

    DataMember(Order = 0)]
    public virtual Guid Id { get; set; }
    [DataMember(Order = 1)]
    public virtual Baz y { get; set; }

    #endregion

    /* ISafeCopy implementation*/
}


[Serializable]
[DataContract]
public enum Baz
{
    [EnumMember(Value = "one")]
    one,
    [EnumMember(Value = "two")]
    two,
    [EnumMember(Value = "three")]
    three
}

しかし、このサービスを呼び出そうとすると、トレース ログに次のエラーが表示されます。

「System.Runtime.Serialization.InvalidDataContractException: タイプ 'BarProxybcb100e8617f40ceaa832fe4bb94533c' は ISerializable にすることはできず、DataContractAttribute 属性を持つことはできません。」

Serializable 属性を取り出すと、WCF サービスは機能しますが、オブジェクトをセッションにシリアル化できない場合。クラス Bar から DataContract 属性を削除すると、WCF サービスが失敗し、

データ コントラクト名が「BarProxy3bb05a31167f4ba492909ec941a54533: http://schemas.datacontract.org/2004/07/」の「BarProxy3bb05a31167f4ba492909ec941a54533」は想定されていません。既知の型のリストに静的に認識されていない型を追加します。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加します。

foo クラスに KnownType 属性を追加してみました

[KnownType(typeof(Bar))]

しかし、私はまだ同じエラーが発生します。

誰でもこれで私を助けることができますか?

どうもありがとう

デイブ

4

3 に答える 3

7

MSDNに関するこの質問は、役立つ可能性があります:DataContractとSerializable

そのスレッドから受け入れられた答え:

  1. [DataContract]一緒に[Serializable]使用できます。

  2. DataContractSerializerはそれらの両方を理解します。タイプが両方でマークされている場合、それはの投影を取ります [DataContract]

  3. WCFでのデータ転送とシリアル化に関するドキュメントは、シリアライザーと既知のタイプに関する詳細を提供しています。データ転送とシリアル

于 2010-03-17T10:38:05.483 に答える
0

wcf でのエンティティ フレームワーク pocos のシリアル化で、これと同じ問題に遭遇しました。メンバーから仮想タグを削除しようとしたとき、何も機能せず、あきらめようとしていました。突然、それは機能し始めました。試してみてください。

于 2011-11-27T04:32:59.430 に答える