Генерация классов C # на основе XML-запроса с использованием ArrayOfString - PullRequest
0 голосов
/ 28 июня 2019

У меня есть запрос xml, и мне нужно сгенерировать классы c # для структуры списка.

Запрос:

  <soapenv:Envelope  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org"
      xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays ">
     <soapenv:Header/>
      <soapenv:Body>
      <tem:request>
         <tem:id>1</tem:id>
         <tem:list>
            <arr:string>Item1</arr:string>
            <arr:string>Item2</arr:string>
            <arr:string>Item3</arr:string>
         </tem:list>
      </tem:request>
   </soapenv:Body>
  </soapenv:Envelope>

Может кто-нибудь помочь мне с этим?Спасибо

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Поскольку у вас нет WSDL-файла для службы, вы можете использовать малоизвестную функцию Visual Studio, которая Вставляет XML как класс , которая использует функции генерации классов, представленные в .NET 4.5.

Шаги для использования этой функции:

  1. Создать файл класса, в который будет вставлен XML.
  2. Поместив курсор в файл класса, нажмите Редактировать.-> Специальная вставка -> Вставить XML как классы.

Затем Visual Studio заполнит файл класса сгенерированными классами для вашего запроса XML.

Примечание: В вашем примере XML в настоящее время неправильно сформирован атрибут xmlns:tem, не закрытый в элементе envelope.Эта функция не будет работать, если XML имеет неправильный формат.

0 голосов
/ 28 июня 2019

Вам не нужны занятия. Я думаю, что в этом случае легче разобрать строку и добавить только элементы в списке. Смотрите код ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            List<string> items = new List<string>(){ "Item1", "Item2", "Item3"};
            string xml = 
                "<soapenv:Envelope  xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org\"" +
                      " xmlns:arr=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">" +
                     "<soapenv:Header/>" +
                      "<soapenv:Body>" +
                      "<tem:request>" +
                         "<tem:id>1</tem:id>" +
                         "<tem:list>" +
                         "</tem:list>" +
                      "</tem:request>" +
                   "</soapenv:Body>" +
                  "</soapenv:Envelope>";

            XDocument doc = XDocument.Parse(xml);
            XElement root = doc.Root;
            XNamespace temNs = root.GetNamespaceOfPrefix("tem");
            XNamespace arrNs = root.GetNamespaceOfPrefix("arr");

            XElement list = doc.Descendants(temNs + "list").FirstOrDefault();

            List<XElement> xItems = items.Select(x => new XElement(arrNs + "string", x)).ToList();

            list.Add(xItems);
            doc.Save(FILENAME);
        }
    }
}
...