Do tnet 3.0.103 - JsonConvert.DeserializeObject ожидает хорошо экранированную строку в отличие от простой Json - PullRequest
0 голосов
/ 02 апреля 2020

Я на Do tnet 3.0.103. Я выставил webapi, код которого определен следующим образом:

[HttpPost]
        public string Post([FromBody] string data)
        {
            try
            {
            EmployeeRequest request = JsonConvert.DeserializeObject<EmployeeRequest>(data);

Теперь, когда я вызываю API у моего почтальона, обычное тело запроса json, подобное этому, не работает

{"EmployeeId": 3, "Name": "John"}

Выдает ошибку, подобную этой,

{
    "errors": {
        "": [
            "Unexpected character encountered while parsing value: {. Path '', line 1, position 1."
        ]
    },
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "|b9ea70ff-4ffda7ef1c244839."
}

Где в качестве экранированной строки в отличие от Json отлично работает тело,

 "{\"EmployeeId\": 3, \"Name\": \"John\"}"

Я бы хотел чтобы все работало просто json.

Любая помощь приветствуется.

Спасибо, Арун

Ответы [ 2 ]

1 голос
/ 02 апреля 2020
Привязка модели

ASP. Net может привязать полезную нагрузку JSON к параметрам вашего действия автоматически. Таким образом, вы должны быть в состоянии покончить с ручной десериализацией:

[HttpPost]
public string Post([FromBody]EmployeeRequest request)
{
    // request should be properly populated
0 голосов
/ 02 апреля 2020

Вам не нужно отдельно десериализовать json. . NET может сделать это для вас из коробки. Попробуйте изменить подпись на: public string Post([FromBody] EmployeeRequest data) и сделать звонок от почтальона без побега. Это должно работать.

...