c#中是否有解析XML文件的简单方法?如果有,是什么?
当前回答
如果您正在处理大量数据(许多兆字节),那么您希望使用XmlReader来流解析XML。
其他任何东西(XPathNavigator, XElement, XmlDocument,甚至XmlSerializer,如果您保留完整的生成的对象图)将导致高内存占用和非常慢的加载时间。
当然,如果您无论如何都需要内存中的所有数据,那么您可能没有太多选择。
其他回答
如果您使用的是。net 2.0,请尝试XmlReader及其子类XmlTextReader和XmlValidatingReader。它们提供了一种快速、轻量级(内存使用等)、仅向前的方法来解析XML文件。
如果需要XPath功能,请尝试XPathNavigator。如果您需要内存中的整个文档,请尝试XmlDocument。
如果您正在处理大量数据(许多兆字节),那么您希望使用XmlReader来流解析XML。
其他任何东西(XPathNavigator, XElement, XmlDocument,甚至XmlSerializer,如果您保留完整的生成的对象图)将导致高内存占用和非常慢的加载时间。
当然,如果您无论如何都需要内存中的所有数据,那么您可能没有太多选择。
我不确定是否存在“解析XML的最佳实践”。有许多技术适用于不同的情况。使用哪种方式取决于具体的场景。
你可以用LINQ转换成XML、XmlReader、XPathNavigator甚至正则表达式。如果你详细说明你的需求,我可以试着提出一些建议。
可以使用ExtendedXmlSerializer进行序列化和反序列化。
Instalation 您可以从nuget安装ExtendedXmlSerializer或运行以下命令:
Install-Package ExtendedXmlSerializer
序列化:
ExtendedXmlSerializer serializer = new ExtendedXmlSerializer();
var obj = new Message();
var xml = serializer.Serialize(obj);
反序列化
var obj2 = serializer.Deserialize<Message>(xml);
. net中的标准XML序列化器非常有限。
不支持具有循环引用的类或具有接口属性的类的序列化, 不支持字典, 没有读取旧版本XML的机制, 如果要创建自定义序列化器,类必须继承自IXmlSerializable。这意味着你的类不是POCO类, 不支持IoC。
ExtendedXmlSerializer可以做到这一点以及更多。
ExtendedXmlSerializer支持。net 4.5或更高版本和。net Core。你可以将它与WebApi和AspCore集成。
使用好的XSD Schema用XSD .exe创建一组类,使用XmlSerializer用XML创建对象树,反之亦然。如果您对模型的限制很少,您甚至可以尝试使用XML *Attributes在您的模型类和XML之间创建一个直接映射。
在MSDN上有一篇关于XML序列化的介绍性文章。
性能提示:构造XmlSerializer的开销很大。如果您打算解析/写入多个XML文件,请保持对XmlSerializer实例的引用。
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?
- c#对象列表,我如何得到一个属性的和