收录日期:2019/06/20 13:39:25 时间:2012-03-13 15:19:05 标签:.net,serialization,xml-serialization,binary-serialization

I have an simple custom object called MyObject (a couple of basic properties and a List(of MyObject), so it's recursive) that I need to serialize for storage. I'm not sure if I'll serialize to XML or Binary yet, but I want to make sure I'm using the most up-to-date methods for doing it, as there are a few different namespaces involved and I might be missing something.

  • To do XML, I'd use System.Xml.Serialization.XmlSerializer
  • To do binary, I'd use System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

There's also a System.Runtime.Serialization.Formatters.Soap.SoapFormatter, but MSDN claims it's depreciated in favor of BinaryFormatter. I would have expected everything to be in the second namespace above - is there a newer version of the XmlSerializer that I should be using?

Those are the correct, current implementations for serialization.

The XMLSerializer is in the System.Xml.Serialization namespace instead of the System.Runtime namespace - I suspect this is because of its location (in the System.XML.dll assembly) and its dependencies on the System.Xml namespace in general.

Also, FYI - when there are newer versions of a class that are to be used in favor of older versions, MSDN flags them as "Obsolete". For example, see XmlDataDocument's help - the first line is:

Note: This API is now obsolete.

There is also DataContractSerializer, which is as of .NET 3.5. It has some improvements over XmlSerializer in a several areas.

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

For JSON serialization, you can use:

using System.Web.Script.Serialization;

...

JavaScriptSerializer().Serialize(PocoObject);

I had some difficulty getting this to work smoothly in .NET 2.0. See my answer to my own question here.