将多个自定义对象序列化和反序列化为XML

时间:2011-07-31 05:21:35

标签: c# serialization

我必须序列化多个自定义对象,如Customer,Store等。每个对象只有属性,对象彼此没有关系。我必须序列化为XML,并反序列化回自定义对象。

我怎样才能在C#中做到这一点?

3 个答案:

答案 0 :(得分:1)

按如下方式生成xsd:

 "$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\@InstallationFolder)\bin\xsd.exe" /n:"$(ProjectName).Namespace" "$(ProjectDir)\<YourXML>" 

这应该是1次,因为您的验证将保持不变。

在项目中创建一个prebuild事件,用于生成类,如下所示:

<PreBuildEvent>
  "$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\@InstallationFolder)\bin\xsd.exe" /n:"$(ProjectName).Namespace" "$(ProjectDir)\<YourXSD>" /c /o:"$(ProjectDir)\<GeneratedClassFolder>"
</PreBuildEvent>

然后,您可以使用内置的.NET XMLSerializer将类编写为XML文件。

答案 1 :(得分:0)

您可以制作定义班级的XSD文件。然后,您可以使用内置的.NET XMLSerializer将类编写到XML文件中。您可以使用XSD在反序列化期间验证输入。

或者您可以为您的班级应用Serializable属性。

答案 2 :(得分:0)

快速谷歌在Switch On上展示了this article代码,其中包含有关如何序列化和反序列化为XML的示例。这是一个关于序列化和反序列化对象的代码示例。

static public void SerializeToXML<_type>(_type item,string fileName)
{
  XmlSerializer serializer = new XmlSerializer( item.GetType() );
  TextWriter textWriter = new StreamWriter( fileName );
  serializer.Serialize(textWriter, item);
  textWriter.Close();
}

static _type DeserializeFromXML<_type>(string fileName)
{
   XmlSerializer deserializer = new XmlSerializer(typeof(_type));
   TextReader textReader = new StreamReader( fileName );

   _type item = (_type)deserializer.Deserialize(textReader);
   textReader.Close();

   return item;
}