Joshua Masa Ответов: 1

Как отправить несколько объектов JSON в одном сообщении web api?


Я смотрю на этот пример (пример 8) как отправить или опубликовать несколько объектов Json. Я хотел передать модель типа сущности, но не уверен, как это сделать, используя указанный пример.

[Route("example8")]
[HttpPost]
public string GetListsFromBody([FromBody] List<List<ParamsObject>> paramsList)
{
  if (paramsList != null)
  {
    return "recieved a list with length:" + paramsList.Count;
  }
 
  return "NOTHING RECIEVED...";
}

JSON с 2 объектами
[
 [
  {"Id1":3,"Id2":76,"Id3":19},
  {"Id1":56,"Id2":87,"Id3":94},
  {"Id1":976,"Id2":345,"Id3":7554}
 ],
 [
  {"Id1":3,"Id2":76,"Id3":19},
  {"Id1":56,"Id2":87,"Id3":94},
  {"Id1":976,"Id2":345,"Id3":7554}
 ]
]

В настоящее время я применяю это к своему коду. Но я не могу этого сделать.Sales_. Add (Sales); он говорит, что у него есть ошибка перегрузки.
[ResponseType(typeof(Sales))]
public HttpResponseMessage PostSales([FromBody]List<List<Sales>> Sales, [FromUri] string auth)
{
    try
    {
        if (ModelState.IsValid)
        {
          db.Sales_.Add(Sales);
          db.SaveChanges();
          return Request.CreateErrorResponse(HttpStatusCode.OK, "Added!");
         }
            else { //...

1 Ответов

Рейтинг:
12

Sergey Alexandrovich Kryukov

В принципе, вы можете отправить любой контент в HTTP-запросе, его нужно только сериализовать в строку. Таким образом, это может быть несколько объектов JSON. Я даже не понимаю, где ты можешь застрять.

Однако вы не пытаетесь отправить 2 или более. И это вполне разумно. То, что вы назвали "JSON с 2 объектами", - это не что иное, как просто одна строка JSON, которая будет проанализирована в один объект Этот объект является массивом верхнего уровня. Вы даже не можете сказать "с 2 объектами". Это один объект с двумя элементами объектов, внутренний массив, каждый из которых имеет три элемента объектов, каждый из которых имеет три свойства.

Следовательно, проблема, которой вы занимаетесь, просто не существует И если он когда-нибудь появится, вы всегда можете свести его к одному объекту, обернув ваши N объектов во внешний объект, имеющий два свойства. Точно так же, как в вашем образце JSON.

Некоторая предыстория: возможно, вам нужно понять, что JavaScript - это рыхлый тип язык; и все массивы и '{...}' объекты-это точно такие же вещи "типа" 'object': ассоциативные контейнеры (массивы) обеспечение доступа к элементам с помощью ключей любых типов. Единственное отличие массива состоит в том, что он имеет length собственность. Пожалуйста, смотрите:
http://en.wikipedia.org/wiki/JavaScript#Dynamic[^],
http://en.wikipedia.org/wiki/Associative_array[^],
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object[^],
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array[^].

Смотреть также: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON[^].

—СА


Joshua Masa

Спасибо за информацию. Я не очень хорошо разбираюсь в терминах. Но как я могу передать продажи в БД?Sales_.Добавить();? Он продолжает говорить, что у него есть недопустимые аргументы.

Sergey Alexandrovich Kryukov

Я уже ответил на ваш вопрос, а не просто прислал вам "информацию". Примешь ли ты это?
Что касается мимолетных продаж, то вы уже их проходите; в чем проблема?
—СА

Joshua Masa

На моей БД.Sales_. Add (Sales); он говорит, что у него есть ошибка перегрузки. Как будто я что-то упускаю.

Sergey Alexandrovich Kryukov

Нет, такого понятия, как "ошибка перегрузки", не существует. Это просто сигнатура метода, который вы пытаетесь вызвать, не соответствует никакой возможной интерпретации ваших фактических параметров. Это слишком просто: посмотрите, какие параметры типов требуются сигнатурой, и убедитесь, что вы предоставляете соответствующее количество параметров типов, совместимых с назначением.
Поскольку вы не показали объявление этого метода, я не могу вам здесь помочь; вы должны сами разобраться в этих простых вещах. Возможно, он не соответствует вашему типу, проанализированному из JSON, но тогда вам нужно извлечь необходимые данные и предоставить их в том виде, в котором требуется вызов, потому что сигнатура, если метод, который вы пытаетесь вызвать, является основным.
—СА