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?
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.
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.
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 (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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With