[DataContract]
public class AssetData
{
[DataMember]
public string Name { get; set; }
[DataMember]
public List<AssetData> ChildAssets { get; set; }
[DataMember]
public int Priority { get; set; }
[DataMember]
public AssetData ParentNode { get; set; }
}
[ServiceKnownType(typeof(Dictionary<string, AssetData>))]
public interface IRtxEquipmentConfiguration
{
[OperationContract]
object GetData(string sKey, string sRequest);
}
與反序列化信息列表上述OperationContract的"GetData"
服務器返回AssetData的字典。 我已經將AssetData標記爲DataContract,並將其所有字段標記爲DataMembers。 在客戶端,我得到了wcf錯誤「套接字連接已被處置。\ r \ n對象名稱:'System.ServiceModel.Channels.SocketConnection'。」。我懷疑這個錯誤是因爲字段ChildAssets。 當我單獨禁用此字段時(通過刪除DataMember標籤),然後在客戶端,我能夠獲取所有Dictionary元素,並在每個元素中使用除ChildAssets之外的所有字段。 我能夠看到剩餘的字段名稱,父節點和優先級。WCF無法在Dictionary元件
任何線索爲什麼WCF無法序列化字典元素中的列表?
你在使用什麼客戶端?也許客戶端上的Web服務引用想要一個ObservableCollection而不是一個列表 – Rumplin 2012-07-17 08:47:52
Rumplin,現在客戶端和服務器都在同一個進程中。我正在使用.NET 4.0框架和C#語言。它是一個自我託管的服務,在客戶端(在我的情況下,在同一個進程中,這只是另一個DLL)我將對象強制轉換爲Dictionary。一切都很好,除了DataMember ChildAssets –
Imran
2012-07-17 08:50:50
只是爲了測試,將列表更改爲ObservableCollection –
Rumplin
2012-07-17 08:59:58