将自定义对象传递给Web服务

我需要将自定义对象传递给远程Web服务。 我已经读过可能有必要实现ISerializable,但我已经这样做了,而且遇到了困难。 C#将自定义对象传递给Web服务方法的正确方法是什么?

作为服务请求的一部分提供的参数必须使用[Serializable]标记,并且基于之前发布的一些答案,您还需要确保自定义对象在构造函数中不包含任何参数。

还要记住,您在类中的任何逻辑都不会在客户端创建的代理类中创建。 您将在客户端看到的所有内容都是默认构造函数和属性。 因此,如果向自定义对象添加方法,请记住客户端不会看到它们或能够使用它们。

对于任何可能放入任何属性的逻辑,同样如此。

[Serializable] public class Customer { public int Id { get; set; } public string Name { get; set; } } 

看起来像这个问题的重复

无论如何,WS交互中涉及的所有对象都应该是XML可序列化的,而不是ISerializable(这是二进制序列化)。 此外,它们应该在服务契约(WSDL)中描述,否则客户端将无法使用它们。 本文对于理解XML Web Services的XML序列化非常有用。

但是,如果你在谈论真正的自定义对象(即任何类型)。 您应该考虑以二进制forms传递它们:或者作为base64编码,或者作为附件。 我链接的问题有一个答案如何做到这一点。

查看此问题 ,了解如何为自定义对象实现XML序列化

编辑:删除了关于[Serializable]的部分

您是在创建服务还是正在使用它?

要创建可以作为web方法的参数传递的对象,您不必执行任何特殊操作。 那就是你要创建一个asmx webservice。

OTOH,如果您正在创建WCF服务,那么您必须使用[DataContract]标记该类,并使用[DataMember]标记要序列化的所有成员。

如果您正在使用Web服务,则在添加服务引用时应生成要传递的对象的代理类。 你只需要使用它们。