Самые современные методы реализации для сериализации объектов в .NET (начиная с версии 4.0) - PullRequest
0 голосов
/ 23 июня 2010

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

  • Чтобы сделать XML, я бы использовал System.Xml.Serialization.XmlSerializer
  • Чтобы сделать бинарный файл, я бы использовал System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

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

Ответы [ 3 ]

2 голосов
/ 23 июня 2010

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

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

2 голосов
/ 23 июня 2010

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

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

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

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

1 голос
/ 23 июня 2010

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

using System.Web.Script.Serialization;

...

JavaScriptSerializer().Serialize(PocoObject);

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

...