【问题标题】:Json Deserialize Object returns null when calledJson反序列化对象在调用时返回null
【发布时间】:2021-06-18 12:06:18
【问题描述】:

我正在使用一个返回如下字符串的 API:

{
  "id": "835166796775451164",
  "username": "˞˞˞˞˞˞˞˞˞˞˞˞˞˞˞˞˞˞˞˞",
  "avatar": "x",
  "discriminator": "1391",
  "public_flags": 0,
  "flags": 0,
  "purchased_flags": 2,
  "locale": "en-US",
  "nsfw_allowed": true,
  "mfa_enabled": false,
  "premium_type": 2,
  "email": "x",
  "verified": false,
  "phone": null
}

以及反序列化此 JSON 的对象:

      public class User
    {
        [JsonProperty(PropertyName ="id")]
        public string Id { get; set;  }

        [JsonProperty(PropertyName = "username")]
        public string Username { get; set; }

        [JsonProperty(PropertyName = "email")]
        public string Email { get; set; }

        [JsonProperty(PropertyName = "discriminator")]

        public string Discriminator { get; set; }

        [JsonProperty(PropertyName ="phone")]
        public string Phone { get; set; }
        
        [JsonProperty(PropertyName ="verfied")]
        public string Verified { get; set; }

    }

但是,当我尝试将接收到的 JSON 字符串反序列化为该对象并调用它时,它返回一个“null”值。这是我的反序列化代码:

 if (responseHtml.IsSuccessStatusCode)
            {
                var json = await responseHtml.Content.ReadAsStringAsync();
                User user= JsonConvert.DeserializeObject<User>(json);
            }

我还尝试从 Deserialization of JSON.Net returns 'null' 制作一个包装器:

 public class UserWrapper
    {
        public User User { get; set; }
    }

但它也返回了一个空值

 static async Task Main(string[] args)
        {
            await utilities.FetchAccountInformation();
            Models.User user= new Models.User();

            Console.WriteLine(user.Username);
        }

【问题讨论】:

    标签: c# json api json.net


    【解决方案1】:

    我修复了它,以防万一有人遇到同样的问题,我想发布一个关于我如何设法解决它的解决方案。基本上我所做的是将附加设置附加到序列化程序的这个类:

     internal static class Converter
        {
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
                DateParseHandling = DateParseHandling.None,
                Converters =
                {
                    new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
                },
            };
        }
    

    然后将其作为参数添加到DeserializeObject方法如:

    User user= JsonConvert.DeserializeObject<User>(json, Converter.Settings);
    

    我希望它对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多