JSON.NET - исключить свойства определенного типа во время выполнения

Мне интересно , как исключить / удалить определенные свойства данного типа (ов) (или их коллекций) из сериализации с помощью Json Библиотека .NET? NET-библиотеку? Я попытался написать свой собственный преобразователь контрактов (наследующий ...

Мне интересно , как исключить / убрать определенные свойства данного типа (ов) (или их коллекций) из сериализации с помощью Json Библиотека .NET? NET-библиотеку? Я попытался написать свой собственный преобразователь контрактов (наследующий ...

Мне интересно , как исключить / убрать определенные свойства данного типа (ов) (или их коллекций) из сериализации с помощью Json Библиотека .NET? Я попытался написать свой собственный преобразователь контрактов (унаследованный от DefaultContractResolver ), но безуспешно.

Я знаю, что я могу сделать это с помощью DataAnnotations, украсив исключенные свойства с помощью ScriptIgnoreAttribute , но это не применимо в моем сценарии. Сериализуемые объекты могут быть практически любыми, поэтому я не знаю, какие свойства исключать во время разработки. Я знаю только типы свойств, которые не следует сериализовать.

Это похоже на довольно простую задачу, но, к сожалению, я нигде не смог найти достойного решения ...

Кстати - Я не привязан к библиотеке Json.NET - если бы это можно было легко сделать с помощью стандартных / других сериализаторов .NET JSON, это было бы одинаково хорошим решением для меня.

ОБНОВЛЕНИЕ

Свойства должны быть исключены перед попыткой их сериализации. Почему?

По сути, типы объектов, которые я получаю и сериализую, могут иметь динамические свойства типа, унаследованного от IDynamicMetaObjectProvider . Я не собираюсь описывать все детали, но в методе DynamicMetaObject , возвращенном из метода GetMetaObject этих объектов, нет реализованного метода DynamicMetaObject.GetDynamicMemberNames (throw NotImplementedException ...). Подводя итог - проблема в том, что те объекты (мне нужно исключить) не позволяют перечислить их свойства , что сериализатор Json.NET пытается сделать за кулисами. Я всегда получаю NotImplementedException .

7
задан Piotr Szmyd 25 August 2011 в 01:39
поделиться