Gå til indholdet

N238 Simple JSON Serialisering og Deserialisering

Du skal oprette en konsolapplikation i C#, der arbejder med JSON serialisering og deserialisering. Applikationen skal have en klasse Person med egenskaberne Navn (string) og Alder (int). Applikationen skal tillade brugeren at indtaste en persons data og gemme den i en JSON-fil. Der skal også være en mulighed for at læse og vise personens data fra denne fil. Der skal kun bruges én fast fil (f.eks. persondata.json) til at gemme og hente persondata.

Applikationen skal have en simpel konsolmenu med følgende muligheder:

  1. Tilføj ny person
  2. Vis person
  3. Afslut

Brugeren skal kunne vælge en handling ved at indtaste et tal, og applikationen skal reagere i overensstemmelse hermed.

Eksempel på Brug

Når applikationen kører, præsenteres brugeren for følgende menu:

Vælg en handling:
1. Tilføj ny person
2. Vis person
3. Afslut

Brugeren indtaster 1 for at tilføje en ny person, og applikationen beder om navn og alder. Efter at have indtastet disse oplysninger, gemmes personens data i persondata.json. Hvis brugeren derefter vælger 2, vises den gemte persons data i konsollen.

Klik for at se et forslag til en løsning
using System.IO;
using System.Text.Json;
using System.Text.Json.Serialization.Metadata;

var options = new JsonSerializerOptions
{
    TypeInfoResolver = new DefaultJsonTypeInfoResolver()
};

while (true)
{
    Console.WriteLine("Vælg en handling:\n1. Tilføj ny person\n2. Vis person\n3. Afslut");
    string? valg = Console.ReadLine();

    switch (valg)
    {
        case "1":
            TilføjPerson(options);
            break;
        case "2":
            VisPerson(options);
            break;
        default:
            return;
    }
}

static void TilføjPerson(JsonSerializerOptions options)
{
    Console.Write("Indtast navn: ");
    string navn = Console.ReadLine() ?? "";
    Console.Write("Indtast alder: ");
    int alder = int.Parse(Console.ReadLine() ?? throw new InvalidOperationException("Der blev ikke indtastet en alder."));

    var person = new Person { Navn = navn, Alder = alder };
    string jsonString = JsonSerializer.Serialize(person, options);
    File.WriteAllText("persondata.json", jsonString);
    Console.WriteLine("Person gemt.");
}

static void VisPerson(JsonSerializerOptions options)
{
    try
    {
        string jsonString = File.ReadAllText("persondata.json");
        var person = JsonSerializer.Deserialize<Person>(jsonString, options)
            ?? throw new JsonException("Persondata kunne ikke deserialiseres.");
        Console.WriteLine($"Navn: {person.Navn}, Alder: {person.Alder}");
    }
    catch (FileNotFoundException)
    {
        Console.WriteLine("Ingen gemt person fundet.");
    }
}

class Person
{
    public string Navn { get; set; } = "";
    public int Alder { get; set; }
}