Связывание базовой модели.NET с именами атрибутов через дефис в пост-запросе

Я подписался на услугу Nexmo SMS, и они предлагают URL обратного вызова для входящих SMS. Почтовый запрос дает следующую структуру Json при уведомлении о получении SMS:

{
  "msisdn": "441632960960",
  "to": "441632960961",
  "messageId": "02000000E68951D8",
  "text": "Hello7",
  "type": "text",
  "keyword": "HELLO7",
  "message-timestamp": "2016-07-05 21:46:15"
}

Используя следующий фрагмент кода, я могу сопоставить все поля с моим SmsReceipt, кроме 'message-timestamp'. Ни одно из полей отметки времени сообщения не заполняется.

public class SmsReceipt
{

    public string msisdn { get; set; }
    public string to { get; set; }
    public string messageId { get; set; }
    public string text { get; set; }
    public string type { get; set; }
    public string keyword { get; set; }
    public string messagetimestamp { get; set; }
    public string messageTimestamp { get; set; }
    public string message_timestamp { get; set; }
}

[HttpPost("inboundsms")]
public async Task<IActionResult> Post([FromBody] SmsReceipt receipt)
{
    return StatusCode(200);
}

Я предполагаю, что то же самое относится к входящим запросам с другими специальными символами, такими как '.' Любые идеи с благодарностью.

1 ответ

Решение

Ваше имя свойства должно совпадать с именем свойства в отправляемых данных. Похоже, ваше имя полезной нагрузки message-timestamp, Вы не можете создать свойство C# с - в этом. Так что ваши варианты

  1. Либо обновите свойство полезной нагрузки json, чтобы оно соответствовало вашему классу C#.

  2. Украсьте свой класс C# JsonProperty(Из Newtonsoft.Json), где вы указываете, какое свойство из опубликованных данных должно быть сопоставлено с этим свойством.

Также я предлагаю использовать DateTime тип. Этот тип был создан для работы со значением даты и времени.

public class SmsReceipt
{
    public string Msisdn { get; set; }
    public string To { get; set; }
    public string MessageId { get; set; }
    public string Text { get; set; }
    public string Type { get; set; }
    public string Keyword { get; set; }

    [JsonProperty("message-timestamp")]
    public DateTime Messagetimestamp { get; set; }
}
Другие вопросы по тегам