Я использую 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; }
}
Не заявленное поведение, но, по крайней мере, это позволяет мне продолжать свою жизнь.