Преобразование нескольких файлов JSON в файлы XML - PullRequest
0 голосов
/ 21 марта 2019

Я относительно новый программист и поэтому обладаю ограниченными знаниями; Тем не менее, меня попросили создать программу для преобразования множества файлов 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 ]

1 голос
/ 21 марта 2019

Вы близки к своей цели,

Так что теперь вы делаете, как,

  1. Чтение строки JSON из StreamReader с ReadToEnd
  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
0 голосов
/ 21 марта 2019

Мне кажется, что вам просто нужно это:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...