Это общая проблема со всеми видами объектов передачи данных , подходят ли они для JSON.NET, WCF или других технологий. Фактически, можно сказать, что все классы , граничащие с приложениями , страдают от этой проблемы в той или иной степени. Эта проблема эквивалентна элементам управления Windows Forms и другим технологиям отображения.
На другом конце стека приложения мы видим ту же проблему с объектами конфигурации и, возможно, с некоторыми типами ORM (такими как классы Entity Framework).
Во всех случаях лучший подход состоит в том, чтобы рассматривать все такие Граничные объекты как тупые типы с большей структурой, чем поведение. Мы уже знаем, что это правильное решение для WCF DataContracts, ASP.NET MVC Views, Windows Forms Controls и т. Д., Так что это было бы хорошо известным решением проблемы.
Так же, как у нас есть контроллеры для заполнения представлений в пользовательском интерфейсе, у нас могут быть сервисные операции, средства отображения и все такое, что отображает DTO в доменные объекты. Другими словами, лучше всего не пытаться сериализовать Foo вообще.
Вместо этого определите класс FooJson
, который представляет статическую структуру Foo, и используйте Mapper для преобразования между ними.