大数据Xml文件(文件大小超过20GB)转换为Json文件

时间:2014-01-27 15:07:44

标签: c# xml json

我有一个XML文件。我想用C#将它转换为JSON。但是,XML文件超过20 GB。

我尝试使用XmlReader读取XML,然后将每个节点附加到JSON文件。我写了以下代码:

var path = @"c:\result.json";
TextWriter tw = new StreamWriter(path, true, Encoding.UTF8);
tw.Write("{\"A\":");

using (XmlTextReader xmlTextReader = new XmlTextReader("c:\\muslum.xml"))
{
    while (xmlTextReader.Read())
    {
        if (xmlTextReader.Name == "A")
        {
            var xmlDoc = new XmlDocument();
            var v = xmlTextReader.ReadInnerXml();

            string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmlDoc, Newtonsoft.Json.Formatting.None, true);

            tw.Write(json);
        }
    }
}

tw.Write("}");
tw.Close();

此代码无效。我在转换json时遇到错误。有没有最好的方法来执行转换?

1 个答案:

答案 0 :(得分:2)

我会按照以下方式进行

  • 使用xsd.exe

  • 从xsd架构生成类
  • 打开文件并逐个阅读顶级(即文档级别)标签(使用XmlTextReader或XmlReader)

  • 使用生成的类将每个标记序列化为对象

  • 将结果对象反序列化为json并保存到

  • 考虑分批保存1000-2000个标签

  • 你对序列化/反序列化很慢是正确的。仍然在几个线程中工作,最好使用TPL将为您提供良好的速度。另外考虑使用json.net序列化程序,它实际上比标准程序快很多(虽然它是web.api的标准)

如果您需要,我可以在早上放一些代码片段。 我们正在以这种方式处理大(1-10gig)文件,以便将数据保存到sql server数据库。