簡體   English   中英

Json 反序列化對象在調用時返回 null

[英]Json Deserialize Object returns null when called

我正在使用一個 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 字符串反序列化為該對象並調用它時,它返回一個“空”值。 這是我的反序列化代碼:

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

我還嘗試從這個JSON.Net 反序列化返回 '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);
        }

我修復了它,以防萬一有人遇到同樣的問題,我想發布一個關於我如何設法解決它的解決方案。 基本上我所做的是添加這個類,將附加設置附加到序列化程序上:

 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);

我希望它可以幫助某人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM