Самые современные методы реализации для сериализации объектов в .NET (начиная с версии 4.0)

У меня есть простой настраиваемый объект с именем MyObject (пара основных свойств и List(of MyObject), поэтому он рекурсивный), который мне нужно сериализовать для хранения. Я еще не уверен, буду ли я сериализован в XML или в двоичный формат, но я хочу убедиться, что использую самые современные методы для этого, поскольку задействовано несколько разных пространств имен, и я могу быть чего-то не хватает.

  • Для работы с XML я бы использовал System.Xml.Serialization.XmlSerializer
  • Для двоичного кода я бы использовал System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

Также есть System.Runtime.Serialization.Formatters.Soap.SoapFormatter, но MSDN утверждает, что он обесценился в пользу BinaryFormatter. Я ожидал, что все будет во втором пространстве имен выше - есть ли более новая версия XmlSerializer, которую я должен использовать?


person SqlRyan    schedule 22.06.2010    source источник
comment
Вопрос субъективный. Разные сериализаторы предназначены для разных целей. Вам нужна глубокая сериализация? Вы хотите взаимодействовать с языками, отличными от CLR?   -  person Justin Dearing    schedule 09.03.2012
comment
@Justin Dearning: На самом деле я не собираюсь спрашивать лучший метод в субъективном смысле, а на самом деле спрашивать о самых последних реализациях для каждого типа. Я не хотел продолжать использовать устаревшую или замененную реализацию, когда более новая была доступна в другом пространстве имен. Поскольку я обнаружил, что наиболее актуально в разных пространствах имен выше (я ожидал, что они будут вместе), это вызвало мой вопрос. Возможно, я смогу уточнить название.   -  person SqlRyan    schedule 13.03.2012


Ответы (3)


Это правильные текущие реализации сериализации.

XMLSerializer находится в пространстве имен System.Xml.Serialization, а не в пространстве имен System.Runtime - я подозреваю, что это связано с его расположением (в сборке System.XML.dll) и его зависимостями от пространства имен System.Xml в целом.

Кроме того, к сведению - когда есть более новые версии класса, которые должны использоваться в пользу более старых версий, MSDN помечает их как «Устаревшие». Например, см. Справку XmlDataDocument - первая строка:

Примечание. Этот API устарел.

person Reed Copsey    schedule 22.06.2010
comment
Я понимаю, что ориентируюсь на .NET 2.0, хотя ответ, кажется, тот же для 4.0. Что касается этих методов, за последние несколько лет ничего не изменилось? - person SqlRyan; 23.06.2010
comment
@rwmnau: Нет. Ссылка, которую я опубликовал, была .NET 4 - хотя вы увидите, что в .NET 2 эта ссылка была подходящим классом. К счастью для вас, в этом случае вы будете использовать тот же API, что и в .NET 4. - person Reed Copsey; 23.06.2010
comment
Я имею в виду, что я нацелен на 2.0, и пространства имен, о которых я упоминал в своем вопросе, по-видимому, по-прежнему являются лучшим выбором, поскольку я предполагаю, что под словом «все еще актуальным» вы имеете в виду, начиная с версии 4.0, они по-прежнему являются правильным выбором. В любом случае, спасибо за подтверждение - я был обеспокоен тем, что мне не хватало гораздо лучшего выбора где-то в этой гигантской структуре ... - person SqlRyan; 23.06.2010
comment
@rwmnau: Да. Перечисленные API-интерфейсы - лучший выбор для этих конкретных форм сериализации как в .NET 2.0, так и в .NET 4.0 (и 3.5!). - person Reed Copsey; 23.06.2010

Существует также DataContractSerializer, начиная с .NET 3.5. Он имеет некоторые улучшения по сравнению с XmlSerializer в нескольких областях.

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx

person code4life    schedule 22.06.2010

Для сериализации JSON вы можете использовать:

using System.Web.Script.Serialization;

...

JavaScriptSerializer().Serialize(PocoObject);

У меня были некоторые трудности с тем, чтобы это работало плавно в .NET 2.0. См. Мой ответ на мой собственный вопрос здесь.

person Ben McCormack    schedule 22.06.2010