#c# #.net #json #javascriptserializer
#c# #.net #json #javascriptserializer
Вопрос:
Я знаю о ScriptIgnoreAttribute
.
Но что, если я хочу игнорировать свойство, основанное на критериях. Например, как игнорировать свойство с нулевым значением при сериализации, только если оно равно null и не содержит никакого значения?
Ответ №1:
https://learn.microsoft.com/dotnet/api/system.web.script.serialization.scriptignoreattribute
Используйте [ScriptIgnore]
using System;
using System.Web.Script.Serialization;
public class Group
{
// The JavaScriptSerializer ignores this field.
[ScriptIgnore]
public string Comment;
// The JavaScriptSerializer serializes this field.
public string GroupName;
}
Комментарии:
1. Я не поддержал это, потому что, хотя это помогло мне, это не отвечает на заданный вопрос.
2. Работает ли это со свойствами, которые были реализованы для интерфейса? поскольку я все еще получаю ошибку при десериализации JSON? Поскольку в моем случае это не сработало
Ответ №2:
Лучший возможный ответ, который у меня есть, — создать свой собственный JavaScriptConverter и проанализировать свойство на основе ваших собственных условий.
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
//...
if (!object.ReferenceEquals(dictionary["MyProperty"],null)){
// My Code
}
//...
}
Комментарии:
1. Я решил использовать метод, который вернет словарь, содержащий только те объекты, которые необходимо сериализовать. А затем сериализовать этот словарь.
2. @Agzam: Перебор? Спорно. Если вы хотели получить полный контроль над сериализацией объектов, то следует пойти по этому пути. Класс JavaScriptSerializer в любом случае возвращает собственный словарь, это просто дает вам свободу размещения его в вашем собственном пользовательском объекте. Когда я имею дело с абстрактной информацией, я обычно использую ключевое слово dynamic и анализирую данные самостоятельно.
Ответ №3:
Я использовал внутренние вместо общедоступных свойств, и у меня это сработало