2012-02-24 2 views
1

私はasp.netアプリケーションからWCFサービスを呼び出しています。DataContract IsReferenceは保存時に機能しますが、取得操作が中断されます

は操作が失敗していましたし、私は属性を設定する必要が言ったエラーを取得して保存するマイ:

[DataContract(IsReference = true)] 

今私の保存操作を動作しますが、私のget操作(コレクションを返すには)コレクションを返しますが、プロパティはすべてゼロになっています。

私が持っている場合:

[Serializable] 

をget操作は動作しますが、保存がで失敗します。

System.Runtime.Serialization exception "contains cycles and cannot be serialized if reference tracking is disabled." 

私はこの問題を回避するにはどうすればよいですか?両方の属性を明示的に指定することはできません。

+2

シリアル化の問題を引き起こすデータコントラクト定義であなたの投稿を更新してください。 「サイクルを含む...」エラーを再現するのに必要なデータ契約およびプロパティの最小数を記入してください。シリアライズされているオブジェクト階層を見ると、これを引き起こしている原因を明らかにすることができます。 – sillv0r

答えて

1

私は、小さなコードに基づいて理解できる限り、これは循環参照の問題である可能性があります。周りを読んで、私はあなた自身のDataContractSerializerを実装しなければならないことを少し前に知っていました(例えば、Sowmy Srinivasanのこのpostを参照してください)。

NET 3.5 SP1のすべてがはるかに簡単ですして:あなたは、ちょうど次のように、のDataContract属性でIsReferenceパラメータを使用する必要があります。

[DataContract(Namespace = "http://schemas.acme.it/2009/10", IsReference=true)] 
public class Node 
{ 
    // everything same as in the example above. 
} 

何らかの理由で、あなたはIsReference属性をオンにした場合、その後、あなたはDataContractの任意のDataMemberでIsRequired属性をtrueに設定できません。理由は何とか説明されているhere

希望小売価格:

関連する問題