Как заставить работать JsonReaderWriterFactory с DataContractSerializer?

Теоретически, DataContractSerializer выглядит очень логично и красиво: он позволяет получить описание некой структуры данных, которую можно сохранить в разных форматах: JSON, XML и octet stream. Это достигается передачей ему разных реализаций абстрактного класса XmlDictionaryReader.

Но на практике он позволяет сериализовывать данные только в XML, который к тому же ещё и довольно избыточный. Я попытался подружить его с JSON и в результате ничего не добился: DataContractSerializer на каждый чих генерирует пространства имён, которые не поддерживаются в JSON, в результате чего я всё время получаю исключения NotSupportedException, которые кидает реализация XmlDictionaryReader для JSON. Мне удалось отключить в нём все упоминания о пространствах имён, кроме xmlns:i, указывающего на XmlSchema, и, видимо, именно оно не позволяет дальше работать.

При использовании DataContractJsonSerializer мне не понравилось, что он енумы сериализует как числа, а не строки, даже при использовании атрибутов DataContract и EnumMember. Ну и вообще непонятно, зачем отдельный сериализатор, если в DataContractSerializer и так предусмотрен уровень абстракции от формата данных. В такой ситуации использование отдельного сериализатора выглядит как костыль.

Эта задача вообще как-нибудь решается без сторонних библиотек?


Ответы (0 шт):