将多个json文件转换为xml文件

时间:2019-03-21 10:49:45

标签: c# json xml file

我是一个相对较新的程序员,因此知识有限;但是,有人要求我创建一个程序,将json文件的负载转换为xml文件。它们很多,而且在内容方面都各不相同(而且我不知道它们到底包含什么)。

我尝试了以下代码

static void ProcessFiles(string path)
    {
        string[] files;
        string[] directories;

        XmlDocument xml = new XmlDocument();
        files = Directory.GetFiles(path);
        foreach (string file in files)
        {
            using (StreamReader r = new StreamReader(file))
            {
                string j = r.ReadToEnd();
                string json = JsonConvert.DeserializeObject(j).ToString();
                xml = JsonConvert.DeserializeXmlNode(json);

                Console.Write(xml);
            }
        }

        directories = Directory.GetDirectories(path);
        foreach(string directory in directories)
        {                
            ProcessFiles(directory);
        }
    }

我设法将其作为字符串“ json”获取,然后出现错误。

    [
  {
    "Start": "date",
    "Finish": "date",
    "Subject": "",
    "Comments": "",
    "Site": "address",
    "Location": null,
    "Status": false,
    "Arrived": true,
    "Noshow": false,
    "Services": "Initial Consultation",
    "Attendees": [
      {
        "AccountId": 1111,
        "AccountType": "MP",
        "Name": "MMS (FP), Support "
      },
      {
        "AccountId": 2220915,
        "AccountType": "PA",
        "Name": "Test, Patient "
      }
    ]
  },
]

我一直在网上寻找解决方案,但到目前为止没有运气。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您已接近目标,

所以现在您的操作就像

  1. 使用StreamReaderReadToEnd读取字符串json
  2. 然后反序列化为dynamic变量。
  3. 然后加载到xml中。

但是在第3点,您尝试将json字符串传递给LoadXml方法,其中LoadXml希望将xml字符串作为输入。

到目前为止,newtonsoft有一种方法可以直接将json转换为xml

XmlDocument xdoc = JsonConvert.DeserializeXmlNode(json);

所以现在您的代码看起来像

//Your code as it is

using (StreamReader r = new StreamReader(file))
{
    string json = r.ReadToEnd();
    xdoc = JsonConvert.DeserializeXmlNode(json);

    xdoc.Save(file + ".xml");
}

//Your code as it is

答案 1 :(得分:0)

在我看来,您只需要这个:

static void ProcessFiles(string path)
{
    foreach (string file in Directory.GetFiles(path))
    {
        JsonConvert.DeserializeXmlNode(File.ReadAllText(file)).Save(file + ".xml");
    }

    foreach (string directory in Directory.GetDirectories(path))
    {
        ProcessFiles(directory);
    }
}