C#学习教程:如何将列表传递给WCF当我用字符串或整数填充列表时,它工作正常。但是当我用List填充它时,它在尝试序列化参数时会产生运行时错误那么有没有办法将包含多个列表的列表传递给WCF?使用XmlSerializer类:WindowsCommunicationFoundation(WCF)可以使用两种不同的序列化技术将应用程序中的数据转换为XML以便在客户端和服务之间传输,这个过程称为序列化。DataContractSerializer作为默认值:默认情况下,WCF使用DataContractSerializer类来序列化数据类型。此序列化程序支持以下类型:基本类型(例如,整数、字符串和字节数组)和一些特殊类型,例如XmlElement和DateTime,它们被视为基本类型。数据协定类型(标有DataContractAttribute属性的类型)。标有SerializableAttribute属性的类型,包括实现ISerializable接口的类型。实现IXmlSerializable接口的类型。许多常见的集合类型,包括许多通用集合类型。许多.NETFramework类型属于后两类,因此是可序列化的。可序列化类型的数组也是可序列化的。有关完整列表,请参阅在服务合同中指定数据传输。DataContractSerializer与数据协定类型一起使用,是编写新WCF服务的推荐方式。有关详细信息,请参阅使用数据协定。何时使用XmlSerializer类:WCF也支持XmlSerializer类。XmlSerializer类不是WCF独有的。它与ASP.NETWeb服务使用的序列化引擎相同。XmlSerializer类支持比DataContractSerializer类更窄的类型集,但允许对生成的XML进行更多控制并支持更多XML架构定义语言(XSD)标准。它还不需要可序列化类型的任何声明性属性。有关详细信息,请参阅.NETFramework文档中的XML序列化主题。XmlSerializer类不支持数据协定类型。当使用Svcutil.exe或VisualStudio中的“添加服务引用”功能为第三方服务生成客户端代码或访问第三方架构时,会自动为您选择合适的序列化程序。如果架构与DataContractSerializer不兼容,则选择XmlSerializer。手动切换到XmlSerializer:有时,您可能必须手动切换到XmlSerializer。例如,当将应用程序从ASP.NETWeb服务迁移到WCF时,可能会发生这种情况,您可能希望重用现有的XmlSerializer兼容类型,而不是创建新的数据协定类型。如果精确控制出现在消息中的XML很重要,但Web服务描述语言(WSDL)文档不可用,例如,在创建类型必须符合某些标准化发布模式的服务时与DataContractSerializer兼容。创建遵循传统SOAP编码标准的服务时。在这些情况和其他情况下,您可以通过将XmlSerializerFormatAttribute属性应用于服务来手动切换到XmlSerializer类,如以下代码所示。[ServiceContract][XmlSerializerFormat]publicclassBankingService{[OperationContract]publicvoidProcessTransaction(BankingTransactionbt){//代码未显示。}}//BankingTransaction不是数据协定类,//而是与XmlSerializer兼容的类。publicclassBankingTransaction{[XmlAttribute]publicstringOperation;[XmlElement]公共帐户fromAccount;[XmlElement]publicAccounttoAccount;[XmlElement]publicint数量;}//请注意,Account类也必须与XmlSerializer兼容。在上使用KnownType属性。请参阅数据协定已知类型。[KnownType(typeof(List))][DataContract]publicclassYourClass{[DataMember]publicListYourList{get;放;我认为你需要传递一个对象数组而不是尝试使用泛型。Web服务是独立于平台的,因此需要由任何客户端使用-如果.NET1.x应用程序试图访问该服务怎么办?我在WCF服务中传递通用列表时遇到了同样的问题。原因是默认情况下DataContractSerializer用于序列化数据。使用XmlSerializer解决了我的问题。更多信息:http://msdn.microsoft.com/en-us/library/ms733901.aspx您是否尝试过将列表作为“字符串列表”而不是“对象列表”传递?当您将列表作为对象传递时,SOAP可能缺少序列化信息....List>allYourStringLists=newList>();ListfirstStringList=newList{"a","b"};allYourStringLists.add(firstStringList);然后传递“allYourStringLists”对象嗯...所以你想传递一个字符串列表。正确的?为什么不?以上就是C#学习教程:HowtopassListtoWCF的全部内容分享。如果对您有用,需要了解更多C#学习教程,希望您多加关注—列表>本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
