代码之家  ›  专栏  ›  技术社区  ›  xeraphim

将json反序列化为列表时为Null指针

  •  0
  • xeraphim  · 技术社区  · 6 年前

    我正在尝试将JSON反序列化为reportversandlogdto的列表 System.Text.Json.JsonSerializer

    var reportVersandLogsAsync = JsonSerializer.Deserialize<List<ReportVersandLogDto>>(content, new JsonSerializerOptions {
                        PropertyNameCaseInsensitive = true,
                        IgnoreNullValues = true
                    });
    

    内容如下:

    [
      {
        "AnzahlArtikel": 6,
        "Betreff": "Cupra Daily News",
        "ReportId": 379717,
        "ReportVersandLogId": 4244138,
        "VersendetAm": "2019-11-02T06:30:15.997",
        "Link": "foo"
      }
    ]
    

    报表VersAndLogdto如下所示:

    [JsonObject]
    public class ReportVersandLogDto : IResource
    {
        [JsonProperty("anzahlArtikel")]
        public long AnzahlArtikel { get; set; }
    
        [JsonProperty("betreff")]
        public string? Betreff { get; set; }
    
        [JsonProperty("hasBeenRead")]
        public bool HasBeenRead { get; set; }
    
        [JsonProperty("reportId")]
        public long ReportId { get; set; }
    
        [JsonProperty("reportVersandLogId")]
        public long ReportVersandLogId { get; set; }
    
        [JsonProperty("versendetAm")]
        public string? VersendetAm { get; set; }
    
        //[JsonProperty("link")]
        //public string? Link { get; set; }
    }
    

    JsonSerializer.Deserialize 方法。

    我不知道我做错了什么。。。你能给我指一下方向吗?


    最小可复制示例:


    我已经将整个ReportVersandLogDto发布到上面(它使用来自Newtonsoft.Json)

    class Program
    {
        static void Main(string[] args)
        {
            var content = "\"[{\\\"AnzahlArtikel\\\":6,\\\"Betreff\\\":\\\"Cupra Daily News\\\",\\\"ReportId\\\":379717,\\\"ReportVersandLogId\\\":4244138,\\\"VersendetAm\\\":\\\"2019-11-02T06:30:15.997\\\",\\\"Link\\\":\\\"foo\\\"}]\"";
            var reportVersandLogsAsync = JsonSerializer.Deserialize<List<ReportVersandLogDto>>(content, new JsonSerializerOptions {
                    PropertyNameCaseInsensitive = true,
                    IgnoreNullValues = true
            });
        }
    }
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   haldo Steve Sheldon    6 年前

    看起来你在混 Newtonsoft.Json System.Text.Json .

    JsonProperty

    JsonPropertyName System.Text.Json文件 .

    Newtonsoft.Json System.Text.Json文件 . 尝试将您的类更新为以下内容:

    public class ReportVersandLogDto
    {
        [JsonPropertyName("anzahlArtikel")]
        public long AnzahlArtikel { get; set; }
    
        [JsonPropertyName("betreff")]
        public string Betreff { get; set; }
    
        [JsonPropertyName("hasBeenRead")]
        public bool HasBeenRead { get; set; }
    
        [JsonPropertyName("reportId")]
        public long ReportId { get; set; }
    
        [JsonPropertyName("reportVersandLogId")]
        public long ReportVersandLogId { get; set; }
    
        [JsonPropertyName("versendetAm")]
        public string VersendetAm { get; set; }
    
        [JsonPropertyName("link")]
        public string Link { get; set; }
    }
    

    string? )类型,除非在可为null的上下文中使用它们。

    请看这个 fiddle

    推荐文章