我正在使用JSON.NET 4.5,并遵循此博客帖子,尝试使我的用户对象正确序列化。
我已经苦苦思索了几个小时; 无论我做什么,都无法让Json.NET在整数设置为该值类型的“默认未初始化值”(即0)时忽略它们。
因为Email是空的,所以被省略了。因为Id是0,所以应该被省略。我还尝试在Id上明确设置[DefaultValue(0)]属性,但没有效果。
我做错了什么吗,还是这是一个错误?
更新
再看一眼,对于int类型,DefaultValueAtribute确实被使用。因此,这段代码将导致Id为0的情况不被序列化。
我已经苦苦思索了几个小时; 无论我做什么,都无法让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"
}
因为Email是空的,所以被省略了。因为Id是0,所以应该被省略。我还尝试在Id上明确设置[DefaultValue(0)]属性,但没有效果。
我做错了什么吗,还是这是一个错误?
更新
再看一眼,对于int类型,DefaultValueAtribute确实被使用。因此,这段代码将导致Id为0的情况不被序列化。
[DataContract]
public class User
{
[DataMember]
[DefaultValue(0)]
public int Id { get; set; }
[DataMember]
public string Name{ get; set; }
[DataMember]
public string Email{ get; set; }
}
虽然不是期望的行为,但至少它让我能够继续我的生活。