簡體   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

我有很多.json文件,我存儲在一個文件夾中。 現在,我想將所有這些.json文件序列化到一個文件中。 好吧,我開始了如何進行它的工作,但沒有得到正確的方法。 我的單個.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"
      ]
    }

和另一個.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"
          ]
        }

我每個地方都有類似的.json文件10或15。 我將此文件存儲在一個文件夾中,文件夾名稱是主要的城市名稱。

現在,我想獲取所有這些.json文件,並將其序列化為一個類似於以下內容的單個文件-

我已經以類似的方式為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; }
}

我以這種方式盯着我的編碼-

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

我想以這種方式獲得結果-

{
"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 ..........

        ]

    }
  ]
}

我認為您正在尋找以下鏈接: 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);
}

這會有所幫助嗎?

這對我有用

    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