Json 调用时反序列化对象 returns null
Json Deserialize Object returns null when called
我正在使用一个 API,returns 一个看起来像这样的字符串:
{
"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 字符串反序列化为该对象并调用它时,它 returns 是一个“空”值。这是我的反序列化代码:
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);
}
我修复了它,以防万一有人遇到同样的问题我想 post 一个关于我如何设法解决它的解决方案。基本上我所做的是添加这个 class 将附加设置附加到序列化程序:
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);
希望对大家有所帮助。
我正在使用一个 API,returns 一个看起来像这样的字符串:
{
"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 字符串反序列化为该对象并调用它时,它 returns 是一个“空”值。这是我的反序列化代码:
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);
}
我修复了它,以防万一有人遇到同样的问题我想 post 一个关于我如何设法解决它的解决方案。基本上我所做的是添加这个 class 将附加设置附加到序列化程序:
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);
希望对大家有所帮助。