Как сопоставить данные json с xml для вызова веб-службы из azure функции c# - PullRequest
0 голосов
/ 03 мая 2020

У меня ниже Azure Код функции c#, который работает нормально.

Я вызываю веб-сервис и передаю xml данные в качестве входных данных, но функция Azure получила json данных.

Как мне сопоставить эти xml данные и передать при вызове веб-службы?

            string Jsonbody = await req.Content.ReadAsStringAsync();

            // I'm confused how to map this Jsonbody data to xml and pass to httpContent

            var httpContent = new StringContent(Jsonbody, Encoding.UTF8, "text/xml");


            HttpClient httpClient = new HttpClient();

            string requestUri = "https://mydemo.com/myservice.asmx?listdata";

            var byteArray = Encoding.ASCII.GetBytes("username:password");

            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

            HttpResponseMessage response = await httpClient.PostAsync(requestUri, httpContent);

            string result = await new StreamReader(response.Content.ReadAsStreamAsync().Result).ReadToEndAsync();

Например - Ввод приложения функции json -

{
  "Name": "00141169",
  "CurrencyCode": "EUR",
  "Date": "2020-04-03",
}

сопоставить с этим xml который является входом для веб-сервиса, который передается в httpContent

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <listdata xmlns="http://tempuri.org/">
      <Name>KH001</Name>
      <CurrencyCode>01/01/2018</CurrencyCode>
      <Date>01/01/2020</Date>
    </listdata>
  </soap:Body>
</soap:Envelope>

Как и в Json, мы используем Json сериализацию с использованием класса c#, а затем присваиваем значения, что мы можем сделать с Xml?

У меня есть еще много полей выше, 3 поля - это только примерные данные.

Если я напрямую вызываю функцию app из почтальона и передаю xml ввод в тело, она работает нормально , мой вопрос, если функция приложения ввода json, как сопоставить его в xml и передать.

1 Ответ

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

Если вы просто хотите узнать, как десериализовать XML из строки JSON, вы можете использовать следующий код, в моем тесте я не буду вызывать другой Web-сервис, я полагаю, что десериализация является основной проблемой.

Вы можете использовать JsonConvert для выполнения десериализации, и в моем тесте я верну XML напрямую.

public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

            XNode node = JsonConvert.DeserializeXNode(requestBody);

            return new ContentResult { Content = node.ToString(), ContentType = "application/xml" };
        }

enter image description here

Предположим, что после этого вы могли бы позвонить на запрос Webservice с этим XML, если у вас все еще есть другие проблемы, пожалуйста, не стесняйтесь сообщить мне.

Обновление : мое понимание того, что вы хотите чтобы выбрать какое-либо значение или удалить какое-либо значение, если да, вы можете сослаться на мой код ниже.

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

            XmlDocument doc = JsonConvert.DeserializeXmlNode(requestBody);

            XmlNode rootnode = doc.SelectSingleNode("listdata");

            XmlNode Datenode = rootnode.SelectSingleNode("Date");

            rootnode.RemoveChild(Datenode);


            return new ContentResult { Content = doc.InnerXml.ToString(), ContentType = "application/xml" };

Я получаю данные json из запроса и возвращаю данные XML (удалите Date узел).

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...