简体   繁体   English

从文件夹获取所有.json文件,然后使用C#和JSON.Net在单个.Json文件中进行序列化和序列化

[英]Get all .json Files from a Folder and then serialize in a single .Json File using C# and JSON.Net and Serialize

I have many .json file which I stored in a folder. 我有很多.json文件,我存储在一个文件夹中。 Now I want to get all these .json files to serialize in a single file. 现在,我想将所有这些.json文件序列化到一个文件中。 Well I am started how to proceed with it but not getting the correct approach of it. 好吧,我开始了如何进行它的工作,但没有得到正确的方法。 My single .json file look like this- 我的单个.json文件看起来像这样-

{
      "Name": "Holstentor",
      "Shorttext": "The Holsten Gate is a city gate marking off the western boundary of the old center of the Hanseatic city of Lübeck. This Brick Gothic construction is one of the relics of Lübeck’s medieval city fortifications and one of two remaining city gates, the other being the Citadel Gate  Because its two round towers and arched entrance are so well known it is regarded today as a symbol of this German city, and together with the old city centre of Lübeck it has been a UNESCO World Heritage Site since 1987.\nHolstentor was built in 1464.",
      "GeoCoordinates": {
        "Longitude": 10.6797,
        "Latitude": 53.8662
      },
      "Images": [
        "https://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Holstentor_in_L%C3%BCbeck_Frontseite_-_Zuschnitt.jpg/378px-Holstentor_in_L%C3%BCbeck_Frontseite_-_Zuschnitt.jpg"
      ]
    }

and another .json file 和另一个.json文件

{
          "Name": "Passat (ship)",
          "Shorttext": "Passat is a German four-masted steel barque and one of the Flying P-Liners, the famous sailing ships of the German shipping company F. Laeisz. The name \"Passat\" means trade wind in German. She is one of the last surviving windjammers.",
          "GeoCoordinates": {
            "Longitude": 10.88138889,
            "Latitude": 53.95805556
          },
          "Images": [
            "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Flying_P-Liner_Passat_ship_in_Travem%C3%BCnde.jpg/400px-Flying_P-Liner_Passat_ship_in_Travem%C3%BCnde.jpg"
          ]
        }

I have similar .json files 10 or 15 for each place. 我每个地方都有类似的.json文件10或15。 I stored this files in a folder, the Folder name is the main City name. 我将此文件存储在一个文件夹中,文件夹名称是主要的城市名称。

Now I want to get all this .json files and serialize them in a single file similar like this- 现在,我想获取所有这些.json文件,并将其序列化为一个类似于以下内容的单个文件-

I have generated c# class for json object in the similar way- 我已经以类似的方式为json对象生成了c#类-

 public class GeoCoordinates
 {
 public double Longitude { get; set; }
 public double Latitude { get; set; }
 }

public class Tourist
 {
  public string Name { get; set; }
  public string Shorttext { get; set; }
  public GeoCoordinates GeoCoordinates { get; set; }
  public List<string> Images { get; set; }
 }

 public class City
 {
  public List<Tourist> Tourist { get; set; }
 }

public class RootObject
{
  public List<City> city { get; set; }
}

I stared my coding in this way- 我以这种方式盯着我的编码-

 static void Main(string[] args)
    {
        var startPath = Application.StartupPath;
        var cities = new List<City>();
        DirectoryInfo d = new DirectoryInfo(startPath + @"\FinalJson\Flensburg\");
        foreach (var file in d.GetFiles("*.json"))
        {
          using (StreamReader fi = File.OpenText(file.FullName))
          {
            JsonSerializer serializer = new JsonSerializer();
            City city = (City)serializer.Deserialize(fi, typeof(City));
           cities.Add(city);
         }
        }

        using (StreamWriter file = File.CreateText(@"c:\cities.json"))
        {
            JsonSerializer serializer = new JsonSerializer();
            serializer.Serialize(file, cities);
        }



    }

    public virtual string FullName { get; set; }

    static void DisplayFileSystemInfoAttributes(FileSystemInfo fi)
    {
        //  Assume that this entry is a file.
        string entryType = "File";

        // Determine if entry is really a directory
        if ((fi.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
        {
            entryType = "Directory";
        }
        //  Show this entry's type, name, and creation date.
        Console.WriteLine("{0} entry {1} was created on {2:D}", entryType, fi.FullName, fi.CreationTime);
    }
}

I want to get my result in this way- 我想以这种方式获得结果-

{
"Kiel": [ //city name
    {
        "Tourist": [
            {
                "Name": "Holstentor",
                "Shorttext": "The Holsten Gate is a city gate marking off the western boundary of the old center of the Hanseatic city of Lübeck. This Brick Gothic construction is one of the relics of Lübeck’s medieval city fortifications and one of two remaining city gates, the other being the Citadel Gate  Because its two round towers and arched entrance are so well known it is regarded today as a symbol of this German city, and together with the old city centre of Lübeck it has been a UNESCO World Heritage Site since 1987.\nHolstentor was built in 1464.",
                "GeoCoordinates": {
                    "Longitude": 10.6797,
                    "Latitude": 53.8662
                },
                "Images": [
                    "https://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Holstentor_in_L%C3%BCbeck_Frontseite_-_Zuschnitt.jpg/378px-Holstentor_in_L%C3%BCbeck_Frontseite_-_Zuschnitt.jpg"
                ]
            },
 {
                "Name": "Stadion Lohmühle",
                "Shorttext": "Das Stadion an der Lohmühle, oder auch einfach nur „Lohmühle“ genannt, ist ein reines Fußballstadion in Lübeck und das größte Stadion in Schleswig-Holstein.\nEs ist die Heimat des VfB Lübeck. Nach Abriss der alten Tribüne und dem Bau der neuen Haupttribüne in den 1990er Jahren im Zuge des Aufstiegs in die 2. Bundesliga im Jahre 1996 fasst das Stadion 17.869 Plätze, darunter etwa 4.400 überdachte Sitzplätze.\n\n",
                "GeoCoordinates": {
                    "Longitude": 10.66888905,
                    "Latitude": 53.88111115
                },
                "Images": [
                    "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/L%C3%BCbeck-Lohm%C3%BChle_1.jpg/400px-L%C3%BCbeck-Lohm%C3%BChle_1.jpg"
                ]
            },

   //ans so on ..........

        ]

    }
  ]
}

I think you are looking for below links: http://www.newtonsoft.com/json/help/html/DeserializeWithJsonSerializerFromFile.htm http://www.newtonsoft.com/json/help/html/SerializeWithJsonSerializerToFile.htm 我认为您正在寻找以下链接: http : //www.newtonsoft.com/json/help/html/DeserializeWithJsonSerializerFromFile.htm http://www.newtonsoft.com/json/help/html/SerializeWithJsonSerializerToFile.htm

var cities = new List<City>()

foreach (var file in d.GetFiles("*.json"))
{
  using (StreamReader fi = File.OpenText(file.FullName))
  {
    JsonSerializer serializer = new JsonSerializer();
    City city = (City)serializer.Deserialize(fi, typeof(City));
   cities.Add(city);
 }
}

using (StreamWriter file = File.CreateText(@"c:\cities.json"))
{
    JsonSerializer serializer = new JsonSerializer();
    serializer.Serialize(file, cities);
}

Would this help? 这会有所帮助吗?

This works for me 这对我有用

    using System;
    using System.Collections.Generic;
    using Newtonsoft.Json;

    public class RootObject
    {
        public string url_short { get; set; }
        public string url_long { get; set; }
        public int type { get; set; }
    }

    public class Program
    {
        static public void Main()
        {
foreach (string fileName in Directory.GetFiles("directoryName", "*.json")
    {
       using (StreamReader r = new StreamReader(Server.MapPath(fileName)))
           {
               string json = r.ReadToEnd();
               List<RootObject> ro = JsonConvert.DeserializeObject<List<RootObject>>(json);
           }
        // Do something with the file content
    }

        }  
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM