2014-01-27 66 views
1

我有一个XML文件。我想用C#将它转换为JSON。但是,该XML文件超过20 GB。大数据Xml文件(文件大小超过20GB)转换为Json文件

我试图用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时出现错误。有没有最好的方法来执行转换?

+0

你看过XDocument,你可以用linq查询xml。它会让你的任务更容易 – Murdock

+0

什么是错误?试着处理一个较小的文件(比方说两个节点),看看那个JSON有什么问题(例如:如果你的循环产生一个数组......它在哪里打开/关闭?) –

+0

你试过这个问题的解决方案: http://stackoverflow.com/questions/7711818/storing-large-xml-in-mongodb(类型的双重内容) – aloisdg

回答

2

我会被一个做下列方式

  • 生成类了XSD架构的使用XSD.EXE

  • 打开的文件和阅读最高水平(即您的文档级别)标签的一个(与XmlTextReader的或的XmlReader)

  • 连载每个标签到对象使用生成的类

  • 反序列化生成的对象,以JSON和保存到任何

  • 考虑1000-2000标签

  • 你说得对,序列化/反序列化正在缓慢批节能。仍然在几个线程中工作,最好使用TPL会给你很好的速度。也可以考虑使用json.net串行,实在是比标准的人快很多(这是web.api标准虽然)

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

+0

我以为这是。但序列化和反序列化过程需要很长时间。所以导入xml到db会花费很长时间。我问这个问题找到最快的方法。如果您分享代码片段,我会很高兴。谢谢 –