Passing custom objects to a web service

前端 未结 4 1055
盖世英雄少女心
盖世英雄少女心 2021-02-07 16:17

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 difficu

相关标签:
4条回答
  • 2021-02-07 16:49

    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.

    0 讨论(0)
  • 2021-02-07 16:57

    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; }
    }
    
    0 讨论(0)
  • 2021-02-07 17:02

    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.

    0 讨论(0)
  • 2021-02-07 17:10

    Look at this question to see how to implement XML serialization for your custom objects

    0 讨论(0)
提交回复
热议问题