3

我有一个普通的旧 XML 文件。通过一些XSD.EXE魔法,我做了一个模型。现在我想将 XML 数据读入模型。通常这只是XmlSerializer.Deserialize,但它一直在抱怨命名空间等等。

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

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

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

我明白这限制了我的 XML 阅读能力。

4

2 回答 2

1

I am using this kind of helpers for my UI clients.

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());
}

Beware if you are using windows services, there is a known memory leak in Serialization: http://dotnetcodebox.blogspot.fr/2013/01/xmlserializer-class-may-result-in.html

To avoid this, I suggest you to replace the new XmlSerializer of the code above by a method that creates/retrieves XmlSerializers from a cache (a Dictionary for example) as it is explained in the blog post.

于 2013-02-24T10:29:20.793 回答
1

使用 xsd.exe 遇到了同样的问题,我不想有一个巨大的自动生成文件,我需要修复它才能使其工作,我花了几个小时来使反序列化与黑客和删除命名空间一起工作,等等.

如果您想要一个没有 fuzz 的单行解决方案,请尝试xsd2code ( http://xsd2code.codeplex.com/ ),它可以正常工作。请注意,您需要阅读有关生成类的小指南,以便在生成之前获得所有设置,您不能只单击生成,至少对我来说它没有正确的默认设置,但它是轻而易举地正确设置。

所以我做了:

  1. 用xsd.exe(xsd Hoorah.xml)生成xsd,xsd.exe的那部分没问题。
  2. 使用 xsd2code 生成类(安装并查看指南)
  3. 使用了 xsd2code 生成的类自带的反序列化方法

    var hoorah = Hoorah.Deserialize(xml);
    

只是工作!

于 2013-02-24T17:44:24.200 回答