我正在開發一個帶有兩個類的WCF作爲DataContracts。其中之一是我自己開發的一個數據結構,它管理對象爲JSON,它命名爲JSON;另一個只是我的WebService收到的定製對象,它命名爲Emission。我有三種方法;一個用於創建策略,另一個用於檢索策略,最後一個用JSON類以動態方式查閱目錄。我的問題出現在如下錯誤消息中:DataContract類中的列表<Object>的屬性失敗
「格式化程序嘗試反序列化消息時拋出異常:嘗試反序列化 參數時出錯... InnerException消息是'第1行位置出錯823.元素... 包含 'http://schemas.microsoft.com/2003/10/Serialization/Arrays:ArrayOfanyType' 數據合約的數據。反序列化程序不知道映射到此合約的任何類型。 將與'ArrayOfanyType'相對應的類型添加到已知類型列表中 - for例如, 通過使用KnownTypeAttribute屬性或通過將其添加到傳遞給DataContractSerializer的已知類型列表。'。
請s ee InnerException獲取更多細節。「
我在找一個答案,然後我發現我的問題的原因是我的JSON類中的一個屬性,它是一個通用對象列表。我需要客戶端的這個屬性來初始化我期望接收的對象,所以這個列表可以包含字符串或另一個對象列表,這就是爲什麼我需要這種類型的項目。
我試着使用排序,但沒有成功KnownTypes的,但我不知道如果我做錯事
[KnownType(typeof(Object[]))]
[KnownType(typeof(List<List<Object>>))]
[KnownType(typeof(List<object>))]
[KnownType(typeof(List<string>))]
[KnownType(typeof(List<List<string>>))]
可以說是很重要的,如果我SET值財產內部即使價值屬性永遠不會顯示,一切都很好甚至JSON類在客戶端。附上我的代碼碎片:
public class JSON
{
#region
[DataMember]
public List<Object> value { get; set; } This cause the problem
//public List<Object> value { get; internal set; } This allow everything happens fine
[DataMember]
public List<string> errors { get; set; }
[DataMember]
public Regex pattern { get; internal set; }
[DataMember]
internal Regex commaPattern { get; private set; }
#endregion
}
[ServiceContract(Namespace = "http://EmissionService")]
public interface IEmissionService
{
[OperationContract]
[WebGet(UriTemplate = "Emissions/getCatalog", ResponseFormat = WebMessageFormat.Json)]
string getCatalog(JSON request);
[OperationContract]
[WebInvoke(UriTemplate = "Emissions/createPolicy", ResponseFormat = WebMessageFormat.Json, Method = "POST")]
string createPolicy(Emission emissionRequest);
[OperationContract]
[WebGet(UriTemplate = "Emissions/getPolicy", ResponseFormat = WebMessageFormat.Json)]
JSON getPolicy(JSON request);
}
我希望你能真正幫助我。感謝您的建議!
爲什麼沒有'[KnownType(typeof(List
嗯...你的意思是大寫的對象?其實我已經嘗試過兩種 – user3018905