DefaultValueHandling在Json.NET 4.5中没有兑现

时间:2012-07-16 22:51:34

标签: .net json.net

我正在使用JSON.NET 4.5并遵循此blog post,尝试让我的用户对象正确序列化。

我一直在墙上敲打几个小时;无论我做什么,当它们被设置为“该值类型的默认单位化值”时,我无法让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 被认可为整数。因此,此代码将导致Ids为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 个答案:

答案 0 :(得分:1)

这似乎是一个错误。根据{{​​3}},不需要DefaultValueAttribute。这很有用,例如当你无法编辑你正在序列化的类型时。

我为它做了the example from documentation,以及补丁/黑客(对4.5r8)。