![](/img/trans.png)
[英]Deserialize Object returns null with nested JSON when trying to map it
[英]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.