Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 444
dreadwail Avatar asked Jun 03 '09 22:06

dreadwail


People also ask

How do you pass an object as a parameter in Restful Web Services in Java?

You can not pass your Java Object to query param. You should convert your java object into JSON String and then pass it in query param. You need not to cast manually object into JSON String. There is already created Jackson Library that wil convert your Object to JSON String and vice versa.

What are custom objects?

A custom object is a set of custom records that supplement standard contact and account records. Custom objects allow you to store additional data in a scalable manner and link that data to a contact or account record.


3 Answers

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; }
}
like image 62
Jim Scott Avatar answered Oct 04 '22 08:10

Jim Scott


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 (i.e. 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.

like image 31
DreamSonic Avatar answered Oct 04 '22 07:10

DreamSonic


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.

like image 45
fretje Avatar answered Oct 04 '22 06:10

fretje