siddharth kumar singh
siddharth kumar singh

Reputation: 57

How to get XML output from a WCF Service

I want to get the below given xml as an output for a WCF service.

<?xml version="1.0" encoding="UTF-8"?>
<payloads>
    <payload>
        <firstname>Sid</firstname>
        <secondname>Singh</secondname>
        <number>1</number>
    </payload>
    <payload>
        <firstname>Deepak</firstname>
        <secondname>Shahi</secondname>
        <number>2</number>
    </payload>
    <payload>
        <firstname>Shorya</firstname>
        <secondname>Garg</secondname>
        <number>3</number>
    </payload>
</payloads>

Given below is my service contract and data contract for WCF:-

[ServiceContract]
public interface IService1
{
    [OperationContract]
    Payload Payloads(Payload Payload);
}

[DataContract(Name = "Payload")]
public class Payload
{
    public string _firstname;
    public string _secondname;
    public string _number;

    [DataMember(Name = "firstname")]
    public string firstname
    {
        get { return _firstname; }
        set { _firstname = value; }
    }

    [DataMember(Name = "secondname")]
    public string secondname
    {
        get { return _secondname; }
        set { _secondname = value; }
    }

    [DataMember(Name = "number")]
    public string number
    {
        get { return _number; }
        set { _number = value; }
    }

}

And given below is my class:-

public class Service1 : IService1
    {
        public Payload Payloads(Payload Payload)
        {
            if (Payload == null)
            {
                throw new ArgumentNullException("Payload");
            }
            return Payload;
        }
    }

I am not getting my desired output as in the XML given above using my WCF. please help. Thanks in advance :)

Upvotes: 1

Views: 538

Answers (1)

M. Wiśnicki
M. Wiśnicki

Reputation: 6203

Your model

[XmlRoot(ElementName="payload")]
    public class Payload {
        [XmlElement(ElementName="firstname")]
        public string Firstname { get; set; }
        [XmlElement(ElementName="secondname")]
        public string Secondname { get; set; }
        [XmlElement(ElementName="number")]
        public string Number { get; set; }
    }

    [XmlRoot(ElementName="payloads")]
    public class Payloads {
        [XmlElement(ElementName="payload")]
        public List<Payload> Payload { get; set; }
    }

IServ

 [OperationContract]
              [WebInvoke(Method = "GET",
                  ResponseFormat = WebMessageFormat.Xml,
                  BodyStyle = WebMessageBodyStyle.Bare,
                  UriTemplate = "GetPay")]
              Payload GetPay();

Serv

 public Payload GetPay()
            {
                return new Payload();
            }

Tested and work.

Upvotes: 2

Related Questions