2012-02-16 12 views
0

WCFからSL3へのオブジェクトの転送に問題があります。ネストされたリストのシリアル化

interface IComposite { 
    ICollection<Child_A> Children{ get; set; } 
} 
[DataContract] 
[knownType(typeof(ChildCollection))] 
[knownType(typeof(ICollection<Child_A>))] 
class Composite : IComposite { 
    ChildCollection c = null; 
    [DataMember] 
    public string Name { get;set;} 
    [DataMember] 
    public ICollection<Child_A> Children { get { 
     return c??(c=new ChildCollection()); 
    } set;} 
} 
[CollectionDataContract] 
class ChildCollection : List<Child_A> { 
} 
[DataContract] 
class Child_A { 
    [DataMember] 
    string Name { get;set; } 
} 
[OperationContract] 
Composite GetData(){ 
    var data = new Composite(); 
    data.Children.Add(new Child_A() { Name = "child_a_1" }); 
    return data; 
} 

私はSL3からサービスを呼び出すと、私はリストにCompositeオブジェクトが、ノーアイテムを取得します。 Compositeには他にもコレクションがあります。 [DataMember(Order=0/1)]を設定すると、クライアントでエラーnullreferenceエラーが発生します。私がそれを取り除くと、私はエラーが見つかりません。私はKnowTypeServiceKnownTypeを試しましたが、うまくいきませんでした。私はsvcTraceをチェックしました、単にシリアライゼーションエラーと言います。私が間違っているところ。

SVC TRACE のInnerExceptionメッセージがxxxCoverageEntity 'データコントラクト名を持つ '「タイプ' xxxCoverageEntityた:http://schemas.datacontract.org/2004/07/xxxBusinessEntitiesは' 期待されていません。ここでは、既知の種類のリスト

に静的に知られていない任意の種類を追加xxxCoverageEntityはChild_AはあなたがDataMemberで、コレクションに注釈を付ける必要があるか、それがすべてでシリアル化され得ることはありませんサンプル

+0

どうかこの問題の解決方法がありますか? – Jacob

答えて

0

です。あなたはまた、それ以外の場合はICollectionがある「もの」の種類を知らないので、それが

同様にあなたがChild_ANameプロパティを[DataMember]を追加する必要がありますシリアライズする方法や、それは意志KnownType(typeof(ChildCollection))DataContractに注釈を付ける必要があります。シリアル化されていません

+0

これを試しましたが、クライアントではNullReference例外が発生します。更新された投稿は私が今持っているものです – hungryMind

+0

子供のプロパティから[DataMember]を削除する瞬間、それは空のリストでシリアル化されます。そうでなければnullreference例外 – hungryMind

+0

これはコンソールアプリケーションを作成してサービスを呼び出すことによって純粋にSilverlightのものかどうか確認できますか? –

関連する問題