Lekce 14: Práce s daty – Souborové operace a serializace v C#

V moderních aplikacích je práce s daty jednou z nejdůležitějších funkcí. Data často ukládáme a čteme ze souborů, což zahrnuje operace, jako je vytváření, čtení, zápis nebo mazání souborů. Serializace je dalším klíčovým konceptem, který umožňuje převést objekty do formátu, který lze snadno uložit do souboru nebo přenést po síti. V této lekci se podíváme na základní techniky práce se soubory a serializace v jazyce C#.
1. Práce se soubory v C#
C# poskytuje sadu tříd v rámci prostoru jmen System.IO
, které usnadňují práci se soubory a adresáři. Nejčastěji používané třídy zahrnují:
File
: Nabízí statické metody pro manipulaci se soubory (čtení, zápis, mazání atd.).FileInfo
: Umožňuje pracovat s atributy souborů a poskytuje instanční metody pro práci se soubory.StreamReader
aStreamWriter
: Umožňují čtení a zápis textových souborů.BinaryReader
aBinaryWriter
: Slouží k práci s binárními daty.
Vytvoření a zápis do souboru pomocí třídy File
Třída File
poskytuje jednoduché metody, jako je WriteAllText
a AppendAllText
, které umožňují rychle zapisovat data do textového souboru.
Příklad:
using System.IO;
class Program
{
static void Main()
{
string cesta = "data.txt";
string obsah = "Toto je první řádek textu.";
// Zápis do souboru
File.WriteAllText(cesta, obsah);
Console.WriteLine("Soubor byl vytvořen a text byl zapsán.");
}
}
Výstup: Pokud spustíte tento kód, vytvoří se soubor data.txt s obsahem „Toto je první řádek textu.“
Čtení obsahu souboru pomocí File.ReadAllText
Pro čtení obsahu textového souboru můžeme použít metodu ReadAllText
.
Příklad:
string cesta = "data.txt";
// Čtení obsahu souboru
string obsah = File.ReadAllText(cesta);
Console.WriteLine($"Obsah souboru: {obsah}");
Výstup: Tento kód vypíše obsah souboru na konzoli.
Práce se soubory pomocí StreamWriter
a StreamReader
Třídy StreamWriter
a StreamReader
umožňují práci s textovými soubory s větší kontrolou.
Zápis do souboru:
csharpZkopírovat kódusing System.IO;
StreamWriter zapisovac = new StreamWriter("novySoubor.txt");
zapisovac.WriteLine("Toto je řádek textu zapsaný pomocí StreamWriter.");
zapisovac.Close();
Čtení ze souboru:
using System.IO;
StreamReader ctec = new StreamReader("novySoubor.txt");
string obsah = ctec.ReadToEnd();
Console.WriteLine(obsah);
ctec.Close();
2. Serializace a deserializace
Serializace znamená převod objektu do formátu, který lze snadno uložit (např. do souboru nebo do databáze) nebo přenést po síti. Deserializace je opačný proces, při kterém se objekt obnoví ze serializovaného formátu.
V C# je serializace implementována pomocí různých technologií, jako je BinaryFormatter, XMLSerializer nebo JsonSerializer (pro JSON data).
BinaryFormatter (Binární serializace)
Binární serializace ukládá objekt v binární podobě. Pro její použití musíme označit třídu atributem [Serializable]
.
Příklad serializace:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Osoba
{
public string Jmeno { get; set; }
public int Vek { get; set; }
}
class Program
{
static void Main()
{
Osoba osoba = new Osoba { Jmeno = "Petr", Vek = 30 };
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream("osoba.bin", FileMode.Create))
{
formatter.Serialize(stream, osoba);
Console.WriteLine("Objekt byl serializován.");
}
}
}
Příklad deserializace:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
class Program
{
static void Main()
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream("osoba.bin", FileMode.Open))
{
Osoba osoba = (Osoba)formatter.Deserialize(stream);
Console.WriteLine($"Jméno: {osoba.Jmeno}, Věk: {osoba.Vek}");
}
}
}
JSON Serializace pomocí JsonSerializer
JSON serializace je oblíbená díky své čitelnosti a širokému využití v moderních aplikacích.
Příklad serializace do JSON:
using System;
using System.Text.Json;
using System.IO;
public class Osoba
{
public string Jmeno { get; set; }
public int Vek { get; set; }
}
class Program
{
static void Main()
{
Osoba osoba = new Osoba { Jmeno = "Anna", Vek = 25 };
string json = JsonSerializer.Serialize(osoba);
File.WriteAllText("osoba.json", json);
Console.WriteLine("Objekt byl serializován do JSON.");
}
}
Příklad deserializace z JSON:
csharpZkopírovat kódusing System;
using System.Text.Json;
using System.IO;
class Program
{
static void Main()
{
string json = File.ReadAllText("osoba.json");
Osoba osoba = JsonSerializer.Deserialize<Osoba>(json);
Console.WriteLine($"Jméno: {osoba.Jmeno}, Věk: {osoba.Vek}");
}
}
3. Závěr
Práce se soubory a serializace jsou klíčové dovednosti při vývoji aplikací, které pracují s uloženými daty. C# poskytuje širokou škálu nástrojů pro efektivní manipulaci se soubory a převod objektů do různých formátů. Ať už potřebujete pracovat s textovými soubory nebo přenášet objekty ve formátu JSON, pochopení těchto technik vám umožní vytvářet robustní a efektivní aplikace.