C# 动态反序列化,或LINQ到XML

C# 动态反序列化,或LINQ到XML,c#,model-view-controller,xml-serialization,linq-to-xml,C#,Model View Controller,Xml Serialization,Linq To Xml,与C#Visual Studio 2008、MVC1合作 我通过从Web服务获取一个xml文件并向其中添加一些节点来创建一个xml文件。现在我想将其反序列化为一个类,该类是用于强类型化视图的模型 首先,如果不将xml存储在文件系统中,我将面临实现这一目标的问题,因为我不知道这种序列化和反序列化是如何工作的。我想这是有办法的,只是时间问题 但是,在网上搜索以前的版本时,我使用了LINQ到XML,现在我怀疑使用它是否更好 xml将由一些客户机细节组成,基本上我将使用所有这些细节 有什么提示吗 谢谢

与C#Visual Studio 2008、MVC1合作

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

首先,如果不将xml存储在文件系统中,我将面临实现这一目标的问题,因为我不知道这种序列化和反序列化是如何工作的。我想这是有办法的,只是时间问题

但是,在网上搜索以前的版本时,我使用了LINQ到XML,现在我怀疑使用它是否更好

xml将由一些客户机细节组成,基本上我将使用所有这些细节

有什么提示吗

谢谢

试试这个:

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。

您可以在
内存流
中保存元素(无需将其保存到文件流)

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

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

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

LINQ to XML是一个很好的功能。你可以相信这一点。您不需要从文件中写入或读取数据。可以为XDocument指定字符串或流


有足够的方法将XML元素加载到XDocument对象。加载内容后,您可以轻松地添加/删除元素,然后如果需要,可以保存到磁盘

非常感谢gbanfill,事情是我从名称空间中得到了一个错误,但这似乎是向前迈出的一步
 ms.Position = 0;
 DataContractSerializer serializer = new DataContractSerializer(typeof(Model));
 Model model = (model) serializer.ReadObject(ms);