Десериализация json для объекта в c# не отображает значения - PullRequest
1 голос
/ 12 марта 2020

Я пытаюсь десериализовать строку json с помощью Jsonconverter. У меня есть все значения внутри json, я также хочу упомянуть, что спецификация c json генерируется из чванства, поэтому, когда я посылаю полезную нагрузку в API, она отображает ее в объектную модель.

Однако, когда я пытаюсь десериализовать его в тот же объект, все становится нулевым. Что я делаю не так?

Вот как я его десериализовал

EmailUrlDto testEmailUrlDto = JsonConvert.DeserializeObject<EmailUrlDto>(jsonString);

JSON формат

  {
    "templateUrl": "https://some.blob.url.here.com",
    "paramsHtml": [
  {
    "name": "{{miniAdmin}}",
    "value": "Heyth is Admin!"
  },
  {
   "name": "{{cliBuTree}}",
   "value": "I`m a treeee!"
 }
 ],
 "from": "string",
 "subject": "string",
 "message": "string",
 "isHtmlBody": true,
 "recipients": [
   {
     "recipient": "some.name@lol.com"
   }
 ],
  "cCRecipients": [
    {
      "recipient": "string"
    }
  ],
  "bCCRecipients": [
    {
      "recipient": "string"
    }
  ]
}

EmailUrlDto

public class EmailUrlDto : EmailDto
{
    [Required]
    [JsonPropertyName("templateUrl")]
    public string TemplateUrl { get; set; }

    [Required]
    [JsonPropertyName("paramsHtml")]
    public ParamsHtmlTemplateDto[] ParamsHtml { get; set; }
}

EmailDto

public class EmailDto : Dto
{

    [JsonIgnore]
    public int Id { get; set; }


    [JsonPropertyName("from")]
    [MaxLength(250)]
    public string From { get; set; }


    [JsonPropertyName("subject")]
    [Required]
    [MaxLength(300)]
    public string Subject { get; set; }


    [JsonPropertyName("message")]
    [Required]
    public string Message { get; set; }


    [JsonPropertyName("isHtmlBody")]
    public bool IsHtmlBody { get; set; }


    [JsonIgnore]
    public EStatus EmlStatus { get; set; }


    [JsonPropertyName("smtp")]
    public SMTPConfigurationDto Smtp { get; set; }


    [JsonIgnore]
    public AttachmentDto[] Attachments { get; set; }


    [JsonPropertyName("recipients")]
    public ToRecipientDto[] Recipients { get; set; }


    [JsonPropertyName("cCRecipients")]
    public CcRecipientDto[] CCRecipients { get; set; }


    [JsonPropertyName("bCCRecipients")]
    public BccRecipientDto[] BCCRecipients { get; set; }


    [JsonIgnore]
    public LogDto[] Logs { get; set; }

}

1 Ответ

1 голос
/ 12 марта 2020

Атрибуты, которые вы используете для именования свойств, относятся к пространству имен System.Text.Json.Serialization (например, JsonPropertyName) и используются классом System.Web.Script.Serialization.JavaScriptSerializer во время сериализации / десериализации.

Вы также должны добавить, Атрибут Newtonsoft JsonProperty(string), и он должен работать как положено

[JsonProperty("from")]
[JsonPropertyName("from")]
[MaxLength(250)]
public string From { get; set; }
...