#c# #.net #json #serialization #datacontractserializer
#c# #.net #json #сериализация #datacontractserializer
Вопрос:
У меня есть пара классов, которые я сериализую в XML с помощью DataContract
/ DataMember
атрибутов и DataContractSerializer
. Теперь я хотел бы использовать те же классы для сериализации в JSON для вызовов ajax от клиента. Однако элементы, которые я хочу сериализовать в JSON, немного отличаются от тех, которые я хочу сериализовать в XML. Есть ли способ (с атрибутами) провести различие между этими двумя?
Кстати, я использую DataContractSerializer
в отличие от XmlSerializer
, потому что мне нужно сериализовать закрытые элементы, поэтому переключение на XmlSerializer
не вариант.
Комментарии:
1. Если вы хотите предоставить разные элементы в двух разных контекстах, то по определению у вас есть два разных контракта с данными.
2. Это правда, поэтому, я думаю, вопрос в том, могу ли я определить два разных контракта данных в одном классе?
Ответ №1:
Для сериализации json я использую:
System.Web.Script.Serialization.JavaScriptSerializer
Вы также могли бы использовать это в своей ситуации, используя атрибуты ignore для управления выводом.
http://msdn.microsoft.com/en-us/library/system.web.script.serialization.scriptignoreattribute.aspx
Редактировать:
Просто заметил, что есть еще один вариант, с которым вы могли бы быть более знакомы при работе с datacontracts:
System.Runtime.Serialization.Json.DataContractJsonSerializer
Ссылается:
Комментарии:
1. В основном мне нужно будет исключать / игнорировать элементы для сериализации XML. Возможно ли это также?
2. Вы можете игнорировать общедоступные свойства класса с атрибутами, просто связавшись с DataContractSerializer. Частные элементы могут быть проблемой. Но этот сериализатор не будет выполнять XML-сериализацию. Вам нужно было бы использовать DataContractSerializer или XmlSerializer, как вы упомянули. Проверьте ссылку, в которой приведен пример атрибута ScriptIgnoreAttribute.