通过WCF操作传递通用List时遇到问题 . 在这种情况下,有一个int列表 . 示例4描述为here in MSDN . 请注意,在MSDN示例中,描述了:
//这将成功序列化和反序列化,因为泛型List等效于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”不是预期的 . 将任何静态未知的类型添加到已知类型列表中
1 回答
如果你要声明你的类型,那么序列化工作正常:
(我建议使用属性而不是公共字段 . )
你真的需要你的字段是类型对象吗?如果上述类别过于严格,那么就有办法让它更灵活,但可能没有你想象的那么灵活 .
另请注意,
KnownType
属性适用于整个类,而不适用于单个属性 .