C# 将自定义对象传递给web服务

C# 将自定义对象传递给web服务,c#,.net,web-services,C#,.net,Web Services,我需要将自定义对象传递给远程web服务。我曾读到,可能有必要实现ISerializable,但我已经做到了,并且遇到了困难。在C语言中,将自定义对象传递给web服务方法的正确方法是什么?编辑:删除了关于[Serializable]的部分 您是在创建服务还是在使用服务 要创建一个可以作为webmethod参数传递的对象,您不需要做任何特殊的事情。如果您正在创建一个asmx Web服务 OTOH,如果要创建WCF服务,则必须使用[DataContract]标记该类,并使用[DataMember]标记

我需要将自定义对象传递给远程web服务。我曾读到,可能有必要实现ISerializable,但我已经做到了,并且遇到了困难。在C语言中,将自定义对象传递给web服务方法的正确方法是什么?

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

您是在创建服务还是在使用服务

要创建一个可以作为webmethod参数传递的对象,您不需要做任何特殊的事情。如果您正在创建一个asmx Web服务

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


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

看起来像是这个的复制品

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


但是,如果您谈论的是真正的自定义对象(即任何类型)。您应该考虑以二进制形式传递它们:要么作为Base64编码,要么作为附件。我链接到的问题有一个如何实现的答案。

看看这个,看看如何为自定义对象实现XML序列化

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

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

同样的道理也适用于您可能放入任何属性中的任何逻辑

范例

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

事实上,我在制造和消费。您在这里提到的是我一直在做的事情,但我不断收到VS的投诉,他们抱怨在自定义对象中需要一个无参数构造函数(我添加了该构造函数,但没有效果)。然后您能提供相关代码和确切的投诉吗;-)吉姆,对不起,但是[Serializable]与web服务无关。@John:为什么不呢?XmlSerializer不也依赖于[Serializable]属性吗?添加了示例。当需要序列化自定义对象时,我总是使用[Serializable]属性。@fretje:不,它没有。请参阅。[Serializable]适用于二进制序列化,而不是XML序列化。如果您能具体说明遇到的困难,可能会更好。你到底想干什么,真的?也许一些具体的例子会有所帮助。“传递自定义对象”是什么意思?这可能意味着很多事情。一些细节会有所帮助。