2010-08-26 54 views
4

我有一個返回複數值(這是一棵樹)如何使用web服務返回接口或「複雜」值?

public class DocumentTreeNode 
{ 
    public MyDocument Data 
    { get; set;} 

    private LinkedList<DocumentTreeNode> _children; 

    public IEnumerable<DocumentTreeNode> Children 
    { 
     get 
     { 
      return _children.AsEnumerable(); 
     } 
    } 

    (...) 
} 

不幸的是,當我打電話的web服務,它返回

<?xml version="1.0" encoding="utf-8"?> 
<DocumentTreeNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns="http://tempuri.org/" /> 

我有雙重檢查,對象webservice的我我應該返回的不是空的。

我猜這意味着ASP.Net無法正確序列化我的類(由於IEnumerable?)。我打算使用Xml序列化並讓我的服務返回一個XmlDocument,但我不認爲這是最好的方法。

什麼是最簡單的方式來通過這個對象(用最少的工作)?

+0

你使用WCF嗎? – Josh 2010-08-26 13:15:11

+0

「DocumentTreeNode」使用的所有類型都是可ISerializable嗎?他們都需要,最好使用ISerializable屬性。請參閱:http://stackoverflow.com/questions/2365152/whats-the-difference-between-using-the-serializable-attribute-implementing-ise – cofiem 2010-08-26 13:16:42

+0

是的,DocumentTreeNode被標記爲[Serializable],並且它的所有屬性都是可序列化 – Luk 2010-08-26 13:20:42

回答

1

返回接口的屬性被串行器跳過。它需要一個具體的類型,否則在沒有附加類型元數據的情況下不可能重新水化,這不是OOTB序列化的一部分。

+0

非常感謝!爲了記錄,我最終用一個普通的List 取代了它(顯然LinkedList不容易序列化) – Luk 2010-08-27 20:21:24