Как исключить некоторых участников из сериализации в Json? - PullRequest
8 голосов
/ 21 июня 2011

У меня есть объект, который я хочу сериализовать в формат Json, который я использую:

    public string ToJson()
    {
        JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
        string sJSON = jsonSerializer.Serialize(this);
        return sJSON;
    }

Как определить некоторые поля в "this", чтобы они не сериализовались?

Ответы [ 3 ]

23 голосов
/ 16 ноября 2011

Использовать ScriptIgnoreAttribute .

4 голосов
/ 21 июня 2011

Возможный способ - объявить эти поля как private или internal.

Альтернативное решение - использовать класс DataContractJsonSerializer.В этом случае вы добавляете атрибут DataContract в ваш класс.Вы можете управлять элементами, которые хотите сериализовать, с помощью атрибута DataMember - все отмеченные им элементы сериализуются, а остальные нет.

Вам следует переписать свой метод ToJson следующим образом:

    public string ToJson()
    {
        DataContractJsonSerializer jsonSerializer = 
              new DataContractJsonSerializer(typeof(<your class name>));
        MemoryStream ms = new MemoryStream();
        jsonSerializer.WriteObject(ms, this);
        string json = Encoding.Default.GetString(ms.ToArray());
        ms.Dispose();
        return json;
    }
2 голосов
/ 21 июня 2011

Проверьте класс JavaScriptConverter . Вы можете зарегистрировать конвертеры , чтобы настроить процесс сериализации / десериализации для определенных типов объектов. Затем вы можете включить нужные свойства, не внося никаких изменений в исходный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...