Как передать массив в метод POST Web API, который принимает полезные нагрузки XML и JSON? - PullRequest
0 голосов
/ 22 марта 2020

У меня небольшая проблема, когда я построил конечную точку службы WebAPI, которая принимает объект массива. Я не уверен, правильно ли построены мои классы DTO или что я что-то упускаю, но объект пуст, когда я публикую как XML. Я интегрировал с Swagger и использую пример структуры для публикации данных. См. Ниже код:

Модели:

    public class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public Note[] Notes { get; set; }
    }

    public class Note
    {
        public string Content { get; set; }
        public DateTime CreatedDate { get; set; } = DateTime.Now;
    }

Контроллер:

    [HttpPost]
    public IHttpActionResult AddStudentRecord(Student[] student)
    {
        return Json(student);
    }

Объект запроса:

    <?xml version="1.0"?>
    <Students>
    <Student>
      <Name>John Doe</Name>
      <Age>13</Age>
      <Notes>
       <Note>
        <Content>Some Notes</Content>
        <CreatedDate>1970-01-01T00:00:00.001Z</CreatedDate>
       </Note>
      </Notes>
    </Student>
   </Students>

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

1 Ответ

0 голосов
/ 23 марта 2020

Я наконец понял это. Мне нужно обернуть мой запрос следующим образом, теперь данные поступают, и я также включаю следующее в webApiConfig.

<?xml version="1.0" encoding="UTF-8"?>
<ArrayOfStudent>
   <Student>
      <Name>string</Name>
      <Age>1</Age>
      <Notes>
         <Note>
            <Content>string</Content>
            <CreatedDate>1970-01-01T00:00:00.001Z</CreatedDate>
         </Note>
      </Notes>
   </Student>
</ArrayOfStudent>

WebAPIConfig:

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.UseXmlSerializer = true;
...