Консольное приложение - как прочитать файл json в файле xml? - PullRequest
0 голосов
/ 09 марта 2020

Это будет вопрос от c# новичка. Я хочу вывести файл json, который имеет путь в файле xml. Я не видел учебник по этому поводу. Может быть, кто-то может мне помочь? Вот мой код:

namespace Dev
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                XElement element = XElement.Load(@"D:\\TUTORIALS- VIDEO\\C#\\Tasks\\config.xml");
                List<Company> devices = new List<Company>();

                foreach (XElement item in element.Elements())
                {                
                    Console.WriteLine(item);

                }
            }
            catch (Exception e)
            {
                Console.WriteLine("The file could not be read.");
                Console.WriteLine(e.Message);
            }
            Console.ReadLine();

        }

        public class Company
        {       
            public string jsonPathFileName { get; set; }

        }
    }
}

, который, кажется, не работает: - (

my xml: пример здесь, я хочу вывести company1. json.

<appConfig>
  <Media>
    <company>
        <name>Company 1</name>
        <id>1</id>
        <jsonPathFileName>./company1.json</jsonPathFileName>
        <apiUrl>http://demo.media.com/sp1</apiUrl>
        <username>monitor</username>
        <password>monitor</password>
    </company>
    <company>
        <name>Company 2</name>
        <id>1</id>
        <jsonPathFileName>./company2.json</jsonPathFileName>
        <apiUrl>http://demo.media.com/sp2</apiUrl>
        <username>monitor</username>
        <password>monitor</password>
    </company>
  </Media>
</appConfig>

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Для этого можно использовать LINQ, это будет намного проще:

XElement element = XElement.Load(@"D:\\TUTORIALS- VIDEO\\C#\\Tasks\\config.xml");
List<Company> devices = element.Element("Media").Elements("company").Select(c => new Company()
{
    jsonPathFileName = c.Element("jsonPathFileName").Value,
    //to other properties
}).ToList();

foreach (Company item in devices)
{
    //You can manupulate your path based on your files
    using (StreamReader r = new StreamReader(item.jsonPathFileName))
    {
        string json = r.ReadToEnd();
        dynamic jsonObject = JsonConvert.DeserializeObject<dynamic>(json);
    }
}
0 голосов
/ 09 марта 2020

Вы можете попробовать ниже фрагмент кода

using System;
using System.Xml;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Linq;

public class Program
{
    public static void Main()
    {
        string xml = @"<appConfig>
  <Media>
    <company>
        <name>Company 1</name>
        <id>1</id>
        <jsonPathFileName>./company1.json</jsonPathFileName>
        <apiUrl>http://demo.media.com/sp1</apiUrl>
        <username>monitor</username>
        <password>monitor</password>
    </company>
    <company>
        <name>Company 2</name>
        <id>1</id>
        <jsonPathFileName>./company2.json</jsonPathFileName>
        <apiUrl>http://demo.media.com/sp2</apiUrl>
        <username>monitor</username>
        <password>monitor</password>
    </company>
  </Media>
</appConfig>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

string json = JsonConvert.SerializeXmlNode(doc);
Console.WriteLine("->"+ json+ "<-");
        JObject o = JObject.Parse(json);

        var paths =
    from p in o["appConfig"]["Media"]["company"]
    select (string)p["jsonPathFileName"];

foreach (var item in paths)
{
    Console.WriteLine(item);
}

    }
}
public class Company
        {       
            public string jsonPathFileName { get; set; }

        }
...