【发布时间】:2019-07-16 07:11:15
【问题描述】:
我需要帮助将大型 Xml 转换为 Json 格式。
我一直在研究这个话题。我发现了这个:
How to convert JSON to XML or XML to JSON?
Reading large XML documents in .net
Reading and manpulating large xml of 1 GB
嗯,简单的方法是这样的:
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);
但我无法使用它,因为我的文件很大 (2GB) 所以我得到了OutOfMemoryException。
所以,我需要另一种方式来读取大文件。我一直用这种方式:
using (XmlReader xr = XmlReader.Create(inputPath))
{
while (xr.Read())
{
switch(xr.NodeType)
{
case XmlNodeType.Element:
//Do things
break;
case XmlNodeType.Text:
//Do things
break;
case XmlNodeType.EndElement:
//Do things
break;
}
}
}
我读取了 xml 文件并将 xml 转换为 json 并逐个标记连接字符串。但它很复杂,效率极低,而且不能正常工作。
当我研究时,我发现了 LINQ to XML。但我不知道如何使用它。我认为有利于操作和过滤巨大的 xml,但我需要阅读整个文件。
我的 Xml 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<root>
<key>
<item> value </value>
<item> value2 </value>
<item> value3 </value>
</key>
<id>1</id>
<name>Foo</name>
<hugeArray> //This array has around 12 millions of entries. Here is my problem.
<item>
<direction> </direction>
<companyId> </companyId>
<nameId> </nameId>
</item>
<item>
<direction> </direction>
<companyId> </companyId>
<nameId> </nameId>
</item>
....
</hugeArray>
</root>
我发现数组有问题。我不知道如何剪切和阅读它。
我应该如何阅读整个文件? json应该怎么写?
我正在连接字符,但我可以使用 JsonWriter 类。
更新:
该算法应该能够从任何xml转换为json。
【问题讨论】:
-
@JohnB 但我将它与
XmlReader一起使用 -
您是否尝试过 Load 而不是 LoadXml docs.microsoft.com/en-us/dotnet/api/…?我猜应该分部分流式传输而不是一次全部加载。
-
@Slai 是的。它开始阅读,但在 5 分钟后我收到
OutOfMemoryException。