Json.NET 4.5中不支持DefaultValueHandling



我正在使用JSON.NET 4.5并关注这篇博客文章,试图让我的用户对象正确序列化。

我的头撞在墙上好几个小时了;无论我做什么,当int被设置为"该值类型的默认单位化值",也就是0时,我都无法让Json.NET忽略它们。

[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因int而受到表彰。因此,此代码将导致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; }        
}

这不是既定的行为,但至少它让我能够继续我的生活。

这似乎是一个错误。根据文档中的示例,不应该需要DefaultValueAttribute。这很有用,例如当您无法编辑正在序列化的类型时。

我在Github中为它做了一个问题,以及一个补丁/破解(针对4.5r8)。

相关内容

  • 没有找到相关文章

最新更新