DefaultValueHandling не учитывается в Json.NET 4.5

Я использую 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"
}

Электронная почта опущена, потому что она пуста. Id следует опустить, поскольку он равен 0.Я также пытался явно установить атрибут [DefaultValue (0 )] для Id, но безрезультатно.

Я что-то не так делаю, или это баг?

Обновление

Еще раз взглянув, DefaultValueAtribute равно для целых чисел. Таким образом, этот код приведет к тому, что идентификаторы 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; }        
}

Не заявленное поведение, но, по крайней мере, это позволяет мне продолжать свою жизнь.

6
задан johv 15 August 2012 в 09:31
поделиться