使用C#Visual Studio 2008,MVC1。
我正在通过从WebService中获取一个xml文件并向其添加一些节点来创建它。现在我想将它反序列化为一个类,该类是用于强化视图的模型。
首先,我面临的问题是在没有将xml存储在文件系统中的情况下实现这一点,因为我不知道这是如何序列化和反序列化工作的。我想有一种方法,这只是一个时间问题。
但是,在网上搜索我之前的LINQ to XML,现在我怀疑是否更好地使用它。
xml将由一些客户端细节构成,基本上我将使用所有这些。
任何提示?
谢谢!
答案 0 :(得分: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。
答案 1 :(得分:1)
您可以在MemoryStream
之间保存XElement(无需将其保存到文件流中)
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);
序列化的工作方式还有其他选择,所以如果这不是你所拥有的,请告诉我你在使用什么,我会帮助你。
答案 2 :(得分:1)
LINQ to XML是一个很棒的功能。你总是可以依靠它。您无需从文件中写入或读取数据。您可以指定字符串或流到XDocument
有足够的方法将XML元素加载到XDocument对象。 See the appropriate Load functions。加载内容后,您可以轻松添加/删除元素,以后可以根据需要保存到磁盘。