我需要将自定义对象传递给远程Web服务。我已经读过可能需要实现ISerializable,但我已经这样做了,而且遇到了困难。 C#将自定义对象传递给Web服务方法的正确方法是什么?
答案 0 :(得分:7)
作为服务请求的一部分提供的参数必须使用[Serializable]标记,并且根据我之前发布的一些答案,您还需要确保您的自定义对象在构造函数中不包含任何参数。
还要记住,在您的类中拥有的任何逻辑都不会在客户端创建的代理类中创建。您将在客户端看到的所有内容都是默认构造函数和属性。因此,如果向自定义对象添加方法,请记住客户端不会看到它们或能够使用它们。
同样的事情适用于您可能放入任何属性的任何逻辑。
实施例
[Serializable]
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
答案 1 :(得分:5)
看起来与此question
重复无论如何,WS交互中涉及的所有对象都应该是XML可序列化的,而不是ISerializable(这是二进制序列化)。此外,它们应该在服务契约(WSDL)中描述,否则客户端将无法使用它们。 This article对于理解XML Web服务的XML序列化应该是有用的。
但是,如果您正在谈论真正的自定义对象(即任何类型)。您应该考虑以二进制形式传递它们:或者作为base64编码,或者作为附件。我联系的问题有答案如何做到这一点。
答案 2 :(得分:1)
编辑:删除了关于[Serializable]
的部分您是在创建服务还是正在使用它?
要创建一个可以作为webmethod参数传递的对象,您不必执行任何特殊操作。那就是你要创建一个asmx webservice。
OTOH,如果您正在创建WCF服务,则必须使用[DataContract]标记该类,并使用[DataMember]标记要序列化的所有成员。
如果您正在使用Web服务,则在添加服务引用时应生成要传递的对象的代理类。你只需要使用它们。
答案 3 :(得分:0)
请查看此question以了解如何为自定义对象实现XML序列化