Оба делают примерно то же самое, но используют очень разную инфраструктуру, применяя различные ограничения к классам, которые вы хотите сериализовать / десериализовать, и обеспечивая разную степень гибкости при настройке процесса сериализации / десериализации.
Для DataContractJsonSerializer
Вы должны пометить все классы, которые вы хотите сериализовать, используя DataContract
atrtibute, и все члены, используя атрибут DataMember
.Если у некоторых из вас есть члены перечисления, перечисления также должны быть помечены как DataContract
, а каждый член перечисления - с атрибутом EnumMember
.Также DataContractJsonSerializer
позволяет вам точно контролировать весь процесс сериализации / десериализации, изменяя логику разрешения типов и заменяя типы, которые вы сериализуете, суррогатами.
Для JavaScriptSerializer
вы должны предоставить конструктор без параметров, если вы планируете десериализациюобъекты из строки json.
Для меня я обычно использую JavaScriptSerializer
в логике представления, где есть простая модель, которую я хочу визуализировать в Json вместе со страницей, без дополнительных запросов ajax.И мне даже обычно не нужно десериализовать их обратно в c # - так что никаких накладных расходов вообще нет.Но если это логика персистентности, когда я хочу сохранить объекты в хранилище данных (обычно в хранилище без SQL), чтобы загрузить их позже, я предпочитаю использовать DataContractJsonSerializer
, поскольку накладные расходы на размещение атрибутов стоят гибкости при сериализации / десериализациинастройка процесса, особенно когда речь идет о загрузке сериализованных данных в объекты более новой версии с обновленными определениями