Как pnet параметр контроллера API не десериализуется правильно - PullRequest
0 голосов
/ 05 мая 2020

Я новичок в C# и ASP. NET. У меня есть контроллер API с этим методом действий:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace Mautic.Webhook 
{
    [ApiController]
    [Route("mautic/[controller]")]
    public class WebhookController : ControllerBase
    {
        public WebhookController(ILogger<WebhookController> logger)
        {
            Logger = logger;
        }

        [HttpPost]
        public ActionResult WebhookAction(WebhookRequest data)
        {
            Logger.LogInformation(ObjectDumper.Dump(data.LeadPostDelete));
            return NoContent();
        }

        private ILogger<WebhookController> Logger { get; }
    }
}

И есть это определение WebhookRequest:

using System.Collections.Generic;
using Newtonsoft.Json;

namespace Mautic 
{
    public class ContactWebhookRequest 
    {
        public int id { get; set; }
        public string timestamp { get; set; }
    }

    public class WebhookRequest
    {
       [JsonProperty(PropertyName = "mautic.lead_post_delete")]
       public List<ContactWebhookRequest> LeadPostDelete { get; set; }
       public string timestamp { get; set; }
    }
}

Когда я получаю данные в контроллере, я хочу, чтобы он десериализовался в мой класс, но у меня есть null для свойства LeadPostDelete. Понимает ли ASP. NET атрибут Newtonsoft JsonProperty? Или мне нужно перенести его на System.Text.Json?

Также достаточно перехода на System.Text.Json, иначе мне нужно будет десериализовать это вручную на моем контроллере?

Ответы [ 2 ]

1 голос
/ 05 мая 2020
Атрибут

JsonProperty существует как в «старом» Newtonsoft.Json, который был по умолчанию в .Net Core до версии 3. Вы, вероятно, используете новый System.Text.Json, который не распознает этот атрибут из коробки.

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

0 голосов
/ 20 июля 2020

Если вы хотите избежать рефакторинга при переходе на 3+, вы должны заставить контроллеры использовать Newtonsoft. Json:

https://dotnetcoretutorials.com/2019/12/19/using-newtonsoft-json-in-net-core-3-projects/

Извините за My Engli sh.

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