6

我正在使用 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; }        
}

不是所说的行为,但至少它可以让我继续我的生活。

4

1 回答 1

1

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

在 Github上为它提出了一个问题,以及一个补丁/黑客(针对 4.5r8)。

于 2012-08-16T09:24:50.720 回答