Json.NET 4.5中未遵循DefaultValueHandling设置

6
我正在使用JSON.NET 4.5,并遵循此博客帖子,尝试使我的用户对象正确序列化。
我已经苦苦思索了几个小时; 无论我做什么,都无法让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; }        
}

虽然不是期望的行为,但至少它让我能够继续我的生活。

1个回答

1

这似乎是一个bug。根据文档中的示例,DefaultValueAttribute不应该是必需的。这在你无法编辑正在序列化的类型时非常有用。

我已经在Github上提出了一个问题,并附带了一个补丁/修复程序(针对4.5r8版本)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接