Каков правильный синтаксис для сериализации PUT angular KeyValue в ASP. NET KeyValuePair? - PullRequest
0 голосов
/ 18 июня 2020

Я пытался сериализовать KeyValue «Массив», чтобы отправить его через PUT через http на мой asp. net веб-сервер.

Функция в Angular выглядит так:

SortAboutUs(data : KeyValue<number,number>[]) {
    this.dataTransmitter.Put(this.apiUrl+'/api/aboutus/sort', data);    
}

, и если я отлажу следующий контейнер данных, он будет выглядеть так:

Datacontainer

У меня в моем. net основной контроллер веб-сервера

[HttpPut("[action]")]
public ActionResult<bool> Sort(IList<KeyValuePair<int, int>> dto)
{
    return Ok(_aboutUsService.Sort(dto));
}

Однако я получаю следующую ошибку при попытке отправить его через PUT:

The JSON value could not be converted to System.Collections.Generic.List`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.Int32]]. Path: $[0] | LineNumber: 0 | BytePositionInLine: 8.

Странно то, что я уже использовал ту же технику в другом старая версия ядра. net и там вроде все работает.

Я также заметил, что начиная с. net core 3.1 KeyValue в C# изменилось на KeyValuePair, но в более старых версиях. net core это было KeyValue.

Должно ли это быть сделать что-нибудь с моей связанной ошибкой?

И как я могу сериализовать KeyValue из Angular, чтобы мой веб-сервер мог его прочитать?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Мне удалось решить проблему, создав свой собственный класс KeyValue следующим образом:

public class KeyValue<K,V>
{
    public K Key { get; set; }
    public V Value { get; set; }
}

после этого мой метод контроллера теперь выглядит так:

[HttpPut("[action]")]
public ActionResult<bool> Sort([FromBody] IList<KeyValue<int, int>> dto)
{
    return Ok(_aboutUsService.Sort(dto));
}

Благодаря этому подход, Контроллер смог получить отправленный массив KeyValue через PUT с Angular на мой веб-сервер ... enter image description here

0 голосов
/ 18 июня 2020

Ваш объект должен go вроде: -

[
 {
   4: 0
 },
 {
   5: 1
 },
 {
   6: 2
 }
]
...