通過WCF操作傳遞泛型列表時遇到問題。在這種情況下,有一個int列表。示例4被描述爲here in MSDN。請注意,在MSDN示例中,描述如下:DataContract已知類型 - 傳遞數組
//這將成功序列化和反序列化,因爲通用列表等同於已添加到已知類型的int []。
以上,是DataContract:
[DataContract]
[KnownType(typeof(int[]))]
[KnownType(typeof(object[]))]
public class AccountData
{
[DataMember]
public object accNumber1;
[DataMember]
public object accNumber2;
[DataMember]
public object accNumber3;
[DataMember]
public object accNumber4;
}
在客戶端,林調用這樣的操作:
DataTransfer.Service.AccountData data = new DataTransfer.Service.AccountData()
{
accNumber1 = 100,
accNumber2 = new int[100],
accNumber3 = new List<int>(),
accNumber4 = new ArrayList()
};
cService.AddAccounts(data);
而且,這裏是產生AccountData OBJ(WCF的裝飾品代理):
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="AccountData", Namespace="http://schemas.datacontract.org/2004/07/DataTransfer.Service")]
[System.SerializableAttribute()]
[System.Runtime.Serialization.KnownTypeAttribute(typeof(DataTransfer.Client.CustomerServiceReference.PurchaseOrder))]
[System.Runtime.Serialization.KnownTypeAttribute(typeof(DataTransfer.Client.CustomerServiceReference.Customer))]
[System.Runtime.Serialization.KnownTypeAttribute(typeof(int[]))]
[System.Runtime.Serialization.KnownTypeAttribute(typeof(object[]))]
例外情況是:
嘗試序列化參數 http://tempuri.org/:myEntity時發生錯誤。 InnerException消息是 '類型通用列表'與數據合同名稱 'ArrayOfint:http://schemas.microsoft.com/2003/10/Serialization/Arrays' 不是預期的。添加不是靜態已知的已知 類型
究竟是什麼問題? – Vitalik 2010-05-17 01:31:15
對不起,我現在添加了異常說明。請注意,它已包含DataContract中指定的KnownTypeAttribute。 – Erup 2010-05-17 13:31:15
我遇到了同樣的問題。您不能將int []和List添加到已知類型中,因爲它會拋出錯誤,抱怨它們是相同的。但是,如果我只是添加int [],則將爲列表引發序列化異常。奇怪的.... –
Mas
2011-03-07 10:25:05