在没有所有模糊的情况下将XML反序列化为模型

本文关键字:XML 反序列化 模型 模糊 情况下 | 更新日期: 2023-09-27 18:00:54

我有一个普通的旧XML文件。通过一些XSD.EXE魔术,我制作了一个模型。现在我想将XML数据读取到模型中。通常这只是XmlSerializer.Deserialize,但它一直在抱怨名称空间之类的东西。

现在是这样的:我不关心名称空间或XML中的任何其他内容。我只希望反序列化使用"简单的一行代码"。我计划在生活中解析很多XML,我不想花时间与我们都知道不重要的细节的臃肿格式作斗争。

因此,我正在为.Net寻找一个XML反序列化器,它可以去除模糊,只看到一个<obj> <Name> ...并将其数据放入public string Name { get; set; }中。它不应该比例如MyObj myObj = SimpleXml.Deserialize<MyObj>(xmlString);更困难。很像JSON反序列化器的工作原理。

在哪里可以找到像我描述的那样易于使用的XML反序列化程序?

我知道这限制了我的XML阅读能力。

在没有所有模糊的情况下将XML反序列化为模型

我正在为UI客户端使用这种助手。

public string Serialize<T>(T o)
{
    var x = new XDocument();
    using(var w = x.CreateWriter())
        new XmlSerializer(typeof(T)).Serialize(w, o);
    return x.ToString();
}
public T Deserialize<T>(string s)
{
    return
        (T)new XmlSerializer(typeof(T))
        .Deserialize(XDocument.Parse(s)
        .CreateReader());
}

如果您使用的是windows服务,请注意序列化中存在已知的内存泄漏:http://dotnetcodebox.blogspot.fr/2013/01/xmlserializer-class-may-result-in.html

为了避免这种情况,我建议您用一个从缓存(例如Dictionary(创建/检索XmlSerializer的方法来替换上面代码的new XmlSerializer,正如博客文章中所解释的那样。

使用xsd.exe也遇到了同样的问题,我不想有一个巨大的自动生成文件,我需要修复它才能正常工作,我花了几个小时来进行反序列化,比如破解和删除名称空间等等。

如果您想要一个没有模糊的单行解决方案,请尝试xsd2code(http://xsd2code.codeplex.com/),它只是起作用。请注意,你需要阅读关于生成类的小指南,这样你就可以在生成之前获得所有设置,你不能只点击生成,至少对我来说,它没有正确的默认设置,但正确设置很容易。

所以我做了:

  1. 使用xsl.exe(xsd-Hooprah.xml(生成xsd,xsl.exe的这一部分就可以了
  2. 使用xsd2code生成类(安装并参阅指南(
  3. 使用了从xsd2code 生成的类附带的反序列化方法

    var hoorah = Hoorah.Deserialize(xml);
    

真管用!