2012-02-16 194 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)]時,我在客戶端上收到錯誤null參考錯誤。如果我刪除它,我會收到錯誤Not Found。我試過KnowTypeServiceKnownType,但沒有奏效。我檢查了svcTrace,它只是說序列化錯誤。我在哪裏做錯了。

SVC TRACE 設置InnerException消息是「類型 'xxxCoverageEntity' 數據合同名稱 'xxxCoverageEntity:http://schemas.datacontract.org/2004/07/xxxBusinessEntities預計不會'。添加不是靜態已知的已知類型

這裏xxxCoverageEntity列表中的任何類型的Child_A樣品

+0

嘿,也許你有這個問題的解決方案? – Jacob 2016-05-05 07:54:20

回答

0

您需要DataMember註釋集合,否則將無法得到初始化。您還需要註釋DataContractKnownType(typeof(ChildCollection))否則它不知道什麼類型的「一事一議」 ICollection是,因此如何序列化

同樣,你將需要添加[DataMember]Child_AName財產,否則將沒有序列化

+0

我之前和現在嘗試過,但在客戶端,我得到NullReference異常。更新後的帖子是我現在擁有的 – hungryMind 2012-02-16 15:02:27

+0

當我從Children屬性中刪除[DataMember]時,它將用空列表序列化,否則爲空引用異常 – hungryMind 2012-02-16 15:21:16

+0

您可以通過創建控制檯應用程序並調用服務來檢查這是純粹的Silverlight事物嗎? – 2012-02-16 15:30:01