Я использую Json.NET для сериализации класса в JSON.
У меня есть такой класс:
class Test1
{
[JsonProperty("id")]
public string ID { get; set; }
[JsonProperty("label")]
public string Label { get; set; }
[JsonProperty("url")]
public string URL { get; set; }
[JsonProperty("item")]
public List<Test2> Test2List { get; set; }
}
Я хочу добавить JsonIgnore()
атрибут к Test2List
свойству только тогда, когда Test2List
есть null
. Если это не ноль, то я хочу включить его в мой JSON.
JsonSerializerSettings
не так,JsonSerializer
как он показал ошибку для последнегоАльтернативное решение с использованием
JsonProperty
атрибута:Как видно из этого онлайн-документа .
источник
[JsonObject]
, но обратите внимание, что имя атрибута отличается. [отредактированный ответ]Подобный ответ @ sirthomas'S, JSON.NET также уважает в
EmitDefaultValue
собственность наDataMemberAttribute
:Это может быть желательным , если вы уже используете
[DataContract]
и[DataMember]
в типа модели и не хочет , чтобы добавить JSON.NET специфических атрибутов.источник
Ты можешь написать:
[JsonProperty("property_name",DefaultValueHandling = DefaultValueHandling.Ignore)]
Это также заботится о том, чтобы не сериализовать свойства со значениями по умолчанию (не только нуль). Это может быть полезно, например, для перечислений.
источник
Вы можете сделать это, чтобы игнорировать все пустые значения в сериализуемом объекте, и любые нулевые свойства не будут отображаться в JSON
источник
Как видно по этой ссылке на их сайте (http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reduc-serialized-json-size.aspx) я поддержка использования [Default ()] для указания значений по умолчанию
Взято по ссылке
источник
Адаптация к ответу @ Mrchief's / @ amit, но для людей, использующих VB
См .: «Инициализаторы объектов: именованные и анонимные типы (Visual Basic)»
https://msdn.microsoft.com/en-us/library/bb385125.aspx
источник
В .Net Core это теперь намного проще. В вашем файле startup.cs просто добавьте параметры json, и вы сможете настроить их там.
источник
С Json.NET
Результатом будет:
источник
С
System.Text.Json
и .NET Core 3.0 это работало для меня:источник
Чтобы немного пояснить очень полезный ответ GlennG (перевод синтаксиса с C # на VB.Net не всегда «очевиден»), вы также можете декорировать свойства отдельных классов, чтобы управлять обработкой нулевых значений. Если вы сделаете это, не используйте глобальные JsonSerializerSettings из предложения GlennG, в противном случае он переопределит отдельные декорации. Это очень удобно, если вы хотите, чтобы в JSON появлялся пустой элемент, чтобы потребителю не приходилось выполнять какую-либо особую обработку. Например, если потребителю нужно знать, что массив необязательных элементов обычно доступен, но в настоящее время он пуст ... Декорация в объявлении свойства выглядит следующим образом:
Для этих свойств вы вообще не хотите, чтобы они отображались в JSON change : = NullValueHandling.Include to : = NullValueHandling.Ignore . Между прочим - я обнаружил, что вы можете отлично украсить свойство для сериализации XML и JSON (просто расположите их рядом друг с другом). Это дает мне возможность вызывать сериализатор XML в dotnet или сериализатор NewtonSoft по желанию - и работают бок о бок, и мои клиенты имеют возможность работать с XML или JSON. Это гладко, как сопли на дверной ручке, так как у меня есть клиенты, которым требуются оба!
источник
Вот вариант, который похож, но предоставляет другой выбор:
Затем я использую это так:
Разница здесь в том, что:
JsonSerializerSettings
каждого места, где он используется.источник
источник