1

使用 C# Visual Studio 2008、MVC1。

我通过从 WebService 获取一个 xml 文件并向其中添加一些节点来创建一个 xml 文件。现在我想将它反序列化为一个类,该类是用于强类型化视图的模型。

首先,在不将 xml 存储在文件系统中的情况下,我遇到了问题,因为我不知道序列化和反序列化是如何工作的。我想有办法,而且只是时间问题。

但是,在网上搜索之前我遇到了 LINQ to XML,现在我怀疑是否更好地使用它。

xml 将由一些客户详细信息形成,基本上我将使用所有这些。

有什么提示吗?

谢谢!!

4

3 回答 3

1

试试这个:

XmlSerializer xmls = new XmlSerializer(typeof(XElement)); 
FileStream FStream;
try 
{             
   FStream = new FileStream(doctorsPath, FileMode.Open);
  _Doctors = (XElement)xmls.Deserialize(FStream); FStream.Close(); 
   FStream = new FileStream(patientsPath, FileMode.Open); 
  _Patients = (XElement)xmls.Deserialize(FStream)
   FStream.Close(); 
   FStream = new FileStream(treatmentsPath, FileMode.Open);
  _Treatments = (XElement)xmls.Deserialize(FStream);
    FStream.Close(); 
} 
catch 

{ }

这会将所有 XML 文件加载到我们的 XElement 变量中。try-catch 块是一种异常处理形式,可确保如果 try 块中的某个函数抛出异常,程序将跳转到不会发生任何事情的 catch 部分。在处理文件时,尤其是读取文件时,使用 try-catch 是一个好主意。

于 2012-04-04T16:33:28.573 回答
1

您可以将 XElement 保存到一个或从一个MemoryStream(无需将其保存到文件流)

 MemoryStream ms = new MemoryStream();
 XmlWriter xw = XmlWriter.Create(ms);
 document.Save(xw);
 xw.Flush();

然后,如果您将位置重置回 0,则可以使用 DataContractSerializer 对其进行反序列化。

 ms.Position = 0;
 DataContractSerializer serializer = new DataContractSerializer(typeof(Model));
 Model model = (model) serializer.ReadObject(ms);

序列化的工作方式还有其他选项,所以如果这不是您所拥有的,请告诉我您正在使用什么,我会提供帮助。

于 2012-04-04T16:36:56.547 回答
1

LINQ to XML 是一项出色的功能。你总是可以依靠它。您不需要从文件中写入或读取数据。您可以将字符串或流指定到 XDocument

有很多方法可以将 XML 元素加载到 XDocument 对象。请参阅相应的加载函数。加载内容后,您可以轻松添加/删除元素,以后可以根据需要保存到磁盘。

于 2012-04-04T17:25:46.473 回答