简体   繁体   中英

Passing custom objects to a web service

I have a need to pass a custom object to a remote web service. I have read that it may be necessary to implement ISerializable, but I've done that and I'm encountering difficulties. What is the proper way in C# to pass a custom object to a web service method?

The objects you provide as arguments as part of the service request must be marked with [Serializable] and based on some of the answers posted before mine you also need to make sure your custom object does not contain any parameters in the constructor.

Also keep in mind any logic you have inside your class will not get created in the proxy class that gets created on the client side. All you will see on the client side is a default constructor and properties. So if you add methods to your custom objects keep in mind that the client will not see them or be able to use them.

Same thing goes for any logic you might put into any of the properties.

Example

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

Looks like a duplicate to this question

Anyway, all objects involved in WS interactions should be XML-serializable, not ISerializable (which is binary serialization). Moreover, they should be described in the service contract (WSDL), otherwise clients won't be able to consume them. This article should be useful to understand XML-serialization with XML Web Services.

However, if you are talking about really custom objects (ie any type). You should consider passing them in binary form: either as base64-encoded, or as attachments. The question I linked to has an answer how to do that.

Edit: removed the part about [Serializable]

Are you creating the service, or consuming it?

To create an object which can be passed as a parameter of a webmethod, you don't have to do anything special. That is if you're creating an asmx webservice.

OTOH, If you're creating a WCF service then you have to mark the class with [DataContract] and all the members you want to be serialized with [DataMember].

If you're consuming the webservice, then the proxy classes for the object to pass should be generated when you added the service reference. You just have to use them.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM