Как сериализовать объект в формат Soap XML - PullRequest
0 голосов
/ 07 мая 2020

Я вызываю службу WCF и передаю некоторые входные значения, которые дают мне выходные значения в качестве ответа. Я делаю с демонстрационными запросами в строковом формате. но мне нужно сделать его более динамичным c, поэтому я думаю о сериализации объекта в формат Soap XML, но я не знаю, как это сделать.

public void callservice()
{
string reqdata = "<MSRequest>"+
@"<RequestData id="TESTING">"+
@"<Attributes>"+
@"<attribute key="ProductID">534</attribute>"+
@"<attribute key="AGE">29</attribute>"+
@"<attribute key="Gender">0</attribute>"+
"</Attributes>"+
"<RequestOutput>"+
@"<attribute key="ProductName" />"+
@"<attribute key="Premiumamount" />"+
"</RequestOutput>"+
"</RequestData>"+
"</MSRequest>";

Product.Productservice service = new Product.Productservice();
var response = service.processrequest(reqdata);

}

// Выше код, который я использую. Как вы, ребята, видите, я передаю строку с жестко запрограммированными значениями. Но я хочу сериализовать в soap XML, который будет сериализовать объекты в указанный ниже формат.

<attribute key="ProductID">534</attribute>

1 Ответ

1 голос
/ 08 мая 2020

Попробуйте xml linq:

        public void callservice()
        {

            string id = "TESTING";
            string productID = "534";
            int age = 29;
            int gender = 0;

            XElement reqData = new XElement("MSRequest", new object[] {
                new XElement("RequestData", new object[] {
                    new XAttribute("id", id),
                    new XElement("Attributes", new object[] {
                        new XElement("attribute", new object[] {
                            new XAttribute("key", "ProductID"),
                            productID,
                        }),
                        new XElement("attribute", new object[] {
                            new XAttribute("AGE", "ProductID"),
                            age,
                        }),
                        new XElement("attribute", new object[] {
                            new XAttribute("key", "Gender"),
                            gender,
                        })
                    }),
                    new XElement("RequestOutput", new object[] {
                        new XElement("attribute", new object[] {
                            new XAttribute("key", "ProductName")
                        }),
                        new XElement("attribute", new object[] {
                            new XAttribute("AGE", "Premiumamount")
                        })
                    })
                })
            });


            Product.Productservice service = new Product.Productservice();
            var response = service.processrequest(reqData.ToString());

Для сериализации используйте следующие классы:

    public class MSRequest
    {
        [XmlElement("RequestData")]
        public List<RequestData> requestData { get; set; }
    }
    public class RequestData
    {
        [XmlAttribute("id")]
        public string id { get; set; }

        [XmlArray("Attributes")]
        [XmlArrayItem("attribute")]
        List<Attribute> attributes { get; set; }
    }
    public class Attribute
    {
        [XmlAttribute("key")]
        public string key { get; set; }

        [XmlText]
        public string value { get; set; }
    }
...