我正在使用 JSON.NET 4.5 并关注这篇博文,试图让我的用户对象正确序列化。
我已经把头撞在墙上好几个小时了;无论我做什么,当 Json.NET 设置为“该值类型的默认统一值”时,我都无法让 Json.NET 忽略整数,也就是 0。
[DataContract]
public class User
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name{ get; set; }
[DataMember]
public string Email{ get; set; }
}
这是对其进行序列化的调用:
var user = new User()
{
Id = 0,
Name = "John Doe",
Email = null
}
string body = JsonConvert.SerializeObject(user, Formatting.Indented, new JsonSerializerSettings()
{
DefaultValueHandling = DefaultValueHandling.Ignore
});
生成的 JSON 是:
{
"Id": 0,
"Name": "John Doe"
}
电子邮件被省略,因为它为空。Id 应该被省略,因为它是 0。我还尝试在 Id 上显式设置 [DefaultValue(0)] 属性,但没有效果。
我做错了什么,还是这是一个错误?
更新
再看一遍之后,DefaultValueAtribute被授予整数。因此,此代码将导致 0 的 ID 未被序列化。
[DataContract]
public class User
{
[DataMember]
[DefaultValue(0)]
public int Id { get; set; }
[DataMember]
public string Name{ get; set; }
[DataMember]
public string Email{ get; set; }
}
不是所说的行为,但至少它可以让我继续我的生活。