我想通過WCF上的Dictionary屬性傳遞一個類,但它失敗了一個方法,但爲另一個方法工作。當班級在List
內返回時,它可以工作。但是當班級返回DataTable
時,客戶端只是說連接已斷開,並且沒有顯示錯誤。無法序列化System.Collections.Generic.Dictionary`2類型的成員......因爲它實現了IDictionary
這裏是類引起的問題:
[DataContract]
public class DetailLog
{
[DataMember]
public string Name
{
get;
set;
}
[DataMember]
public string SubAction
{
get;
set;
}
[DataMember]
public Dictionary<string, string> Fields
{
get;
set;
}
[DataMember]
public string UserName
{
get;
set;
}
}
我開始了創建無問題工作的方法:
public List<DetailLog> GetDetailLog(List<int> IDs, List<int> actionTypeIds, List<int> userIds, DateTime beginDate, DateTime endDate)
然後,我們需要創建一些非常動態的報道,所以我用一個DataTable我們以前用於其他動態報告。
但我還需要沿着DetailLog類傳遞,所以我創建了一個類型的數據表列:
public DataTable GetCustomDetailReport(int CustomReportID, List<CustomReportFilter> reportFilters)
{
DataTable data = new DataTable();
...
data.Columns.Add("DetailLog", typeof(DetailLog));
...
}
此方法將將退出精細的WCF主機端,但客戶端將錯誤有關連接正在失去。我嘗試添加ServiceKnownType在接口OperationContract的,但它並沒有解決它:
[OperationContract]
[ServiceKnownType(typeof(DetailLog))]
DataTable GetCustomUserAuditReport(int CustomReportID, List<CustomReportFilter> reportFilters);
我真的不能調試序列化時,該方法返回的DataTable,所以我說這個代碼到GetCustomDetailReport結束()來趕上錯誤。
DataContractSerializer ser = new DataContractSerializer(typeof(DataTable), new List<Type> { typeof(DetailLog) });
ser.WriteObject(Stream.Null, data);
當我做到了,我看到了一個異常
Cannot serialize member ... of type System.Collections.Generic.Dictionary`2 because it implements IDictionary.
謝謝你這麼詳細的解釋! – sean