Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多个json文件转换为xml文件_C#_Json_Xml_File - Fatal编程技术网

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

C# 将多个json文件转换为xml文件,c#,json,xml,file,C#,Json,Xml,File,我是一个相对较新的程序员,因此知识有限;然而,我被要求创建一个程序来将json文件的加载转换为xml文件。它们有很多,而且它们的内容都不同,我不知道它们到底是什么 我尝试了以下代码 static void ProcessFiles(string path) { string[] files; string[] directories; XmlDocument xml = new XmlDocument(); files =

我是一个相对较新的程序员,因此知识有限;然而,我被要求创建一个程序来将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 "
      }
    ]
  },
]

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

你已经接近目标了

所以你现在做的就像

使用ReadToEnd从StreamReader读取字符串json 然后反序列化为动态变量。 然后加载到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

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

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);
    }
}

LoadXml方法的可能副本要求输入为XML。现在,您正在获取json并创建一个非xml的对象,然后尝试将其作为xml进行解析。您需要将json反序列化并转换为xml;必须有人对谁将使用XML有一个看法,并且该消费者将对预期的XML词汇表/模式有特定的要求。因此,这里有一个你缺少的要求,它对你如何处理转换有着根本性的影响。消费者就是我。我需要将文件“原样”从json转换为xml,这样我就可以做其他事情了。谢谢你回来找我。我现在得到这个错误:Newtonsoft.Json.JsonSerializationException:'Json根对象有多个属性。根对象必须具有单个属性才能创建有效的XML文档。考虑指定一个反序列化工具名。路径“Name”,第1行,位置29。“是的,这是因为json在根目录下有多个属性,反序列化XmlNode使用单个根属性。让我根据您的需要更新我的答案,如果您不知道多个属性是什么,您如何让它与多个属性一起工作?谢谢您回来找我。我现在得到这个错误:Newtonsoft.Json.JsonSerializationException:'Json根对象有多个属性。根对象必须具有单个属性才能创建有效的XML文档。考虑指定一个反序列化工具名。路径“Name”,第1行,位置29.@SamBoniface-您可能需要发布正在转换的JSON文件的示例。