【问题标题】:Why am I getting a NULL back from my JSON deserialization?为什么我的 JSON 反序列化返回 NULL?
【发布时间】:2019-05-09 20:03:03
【问题描述】:

我有一个如下所示的 JSON 文件:

{
  "dailyNews": [
    {
      "string": "D5FCF84D-B1A2-4172-9A93-E88342AA9E3C",
      "updateDate": "2019-04-24T00:00:00Z",
      "titleText": "something",
      "mainText": "sometihng ",
      "redirectionUrl": " "
    },
    {
      "string": "D5FCF84D-B1A2-4172-9A93-E88342AA9E3C",
      "updateDate": "2019-04-24T00:00:00Z",
      "titleText": "something1",
      "mainText": "sometihng2",
      "redirectionUrl": " "
    },
    {
      "string": "D5FCF84D-B1A2-4172-9A93-E88342AA9E3C",
      "updateDate": "2019-04-24T00:00:00Z",
      "titleText": "something3",
      "mainText": "sometihng4",
      "redirectionUrl": " "
    }
  ]
}

我有一个使用JSON2CSharp 生成的C# 类。这个类看起来像这样:

public partial class TodaysNews
{
    [JsonProperty("string")]
    public string String { get; set; }

    [JsonProperty("updateDate")]
    public DateTimeOffset UpdateDate { get; set; }

    [JsonProperty("titleText")]
    public string TitleText { get; set; }

    [JsonProperty("ImageSrc")]
    public Uri ImageSrc { get; set; }

    [JsonProperty("mainText")]
    public string MainText { get; set; }

    [JsonProperty("redirectionUrl")]
    public Uri RedirectionUrl { get; set; }
}

public class DailyNewsList
{
    public List<TodaysNews> transactions { get; set; }
   // public int count { get; set; }
}

这是将反序列化的代码:

public static DailyNewsList FromJson(string json) => 
    JsonConvert.DeserializeObject<TodaysNews>(json, S3Reader.Converter.Settings);

一切正常;对象TodaysNews 已初始化,但列表对象transactions 为空。我完全不明白为什么?

【问题讨论】:

    标签: json c#-4.0 json.net


    【解决方案1】:

    在您的 DailyNewsList 类中,transactions 属性名称与 JSON 中的 dailyNews 不匹配。您可以通过使用 [JsonProperty] 属性装饰 transactions 属性来解决此问题,就像您在 TodaysNews 类中所做的那样:

    public class DailyNewsList
    {
        [JsonProperty("dailyNews")]
        public List<TodaysNews> transactions { get; set; }
    }
    

    此外,在您的 FromJson 方法中,您应该反序列化为 DailyNewsList 而不是 TodaysNews

    public static DailyNewsList FromJson(string json) => 
        JsonConvert.DeserializeObject<DailyNewsList>(json, S3Reader.Converter.Settings);
    

    小提琴:https://dotnetfiddle.net/5pihJE

    【讨论】:

    • 感谢您的回复。仅供参考,我正在构建一个概念证明,即消息到达 S3 队列并且我可以处理它。我的 Json 文件中有问题。因为即使使用您的代码(我从 dotnetfiddle 复制),我也得到了一个空值。所以,我创建了一个序列化为 JSON 的类,并且该类有效。我不知道我的文件有什么问题,但这只是一个例子,所以我继续前进。
    猜你喜欢
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    相关资源
    最近更新 更多