C# Academy · Lektion

JSON med System.Text.Json (opt-in og converters)

JSON, der er kompatibel med C# 6: brug DataContractJsonSerializer med [DataContract]/[DataMember] (opt-in-medlemmer), og foretag enkle navnetilpasninger svarende til converters.

Lektion 2 af 38 trin

JSON med System.Text.Json (opt-in og converters) er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 2 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 3 lektioner i alt.

JSON i C# 6: plan

Mål: Serialisere og deserialisere JSON uden eksterne pakker.

  • Brug DataContractJsonSerializer
  • Tilvælg medlemmer via DataMember
  • Tilpas navne med Name=
  • Skriv og læs sikkert fra filer

Model med tilvalg

Tilvalgsmodel: Markér typen med DataContract og kun de inkluderede medlemmer med DataMember. Brug Name= til at styre JSON-nøgler.

using System;
using System.Runtime.Serialization;

[DataContract] // opt-in: only [DataMember] will be serialized
public sealed class User
{
  [DataMember(Name = "id")]
  public int Id { get; set; }

  [DataMember(Name = "name")]
  public string Name { get; set; }

  // Not included: no DataMember
  public string InternalNote { get; set; }
}

public class Program
{
  public static void Main(string[] args)
  {
    User u = new User { Id = 7, Name = "Ada", InternalNote = "hidden" };
    Console.WriteLine("Ready to serialize: " + u.Name);
  }
}

Serialiser til JSON

Opret en DataContractJsonSerializer, skriv til en datastrøm, og kod den som UTF-8 til en streng.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

[DataContract]
public sealed class User
{
  [DataMember(Name = "id")]
  public int Id { get; set; }

  [DataMember(Name = "name")]
  public string Name { get; set; }

  public string InternalNote { get; set; }
}

public class Program
{
  public static string ToJson(User u)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
    using (MemoryStream ms = new MemoryStream())
    {
      ser.WriteObject(ms, u);
      return Encoding.UTF8.GetString(ms.ToArray());
    }
  }

  public static void Main(string[] args)
  {
    User u = new User { Id = 1, Name = "Ada", InternalNote = "not saved" };
    string json = ToJson(u);
    Console.WriteLine(json); // {"id":1,"name":"Ada"}
  }
}

Deserialiser fra JSON

Deserialiser ved at læse fra en datastrøm. Kun felter med DataMember udfyldes.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

[DataContract]
public sealed class User
{
  [DataMember(Name = "id")]
  public int Id { get; set; }

  [DataMember(Name = "name")]
  public string Name { get; set; }
}

public class Program
{
  public static User FromJson(string json)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
    byte[] bytes = Encoding.UTF8.GetBytes(json);
    using (MemoryStream ms = new MemoryStream(bytes))
    {
      return (User)ser.ReadObject(ms);
    }
  }

  public static void Main(string[] args)
  {
    string json = "{\"id\":42,\"name\":\"Bob\"}";
    User u = FromJson(json);
    Console.WriteLine(u.Id + " - " + u.Name);
  }
}

Gem og indlæs JSON-filer

Gem JSON med FileStream i using-blokke. Det afspejler virkelige apps: indstillinger, små datamængder osv.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

[DataContract]
public sealed class Settings
{
  [DataMember(Name = "theme")]
  public string Theme { get; set; }

  [DataMember(Name = "notifications")]
  public bool Notifications { get; set; }
}

public class Program
{
  public static void Save(string path, Settings s)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Settings));
    using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
    {
      ser.WriteObject(fs, s);
    }
  }

  public static Settings Load(string path)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Settings));
    using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
    {
      return (Settings)ser.ReadObject(fs);
    }
  }

  public static void Main(string[] args)
  {
    string path = "settings.json";
    Save(path, new Settings { Theme = "dark", Notifications = true });
    Settings loaded = Load(path);
    Console.WriteLine(loaded.Theme + " / " + loaded.Notifications);
  }
}

Navngivning og enkle konverteringer

Tilpas:

  • Brug Name= i DataMember til at tilknytte egenskabsnavne (f.eks. user_name)
  • For enumereringer skal du markere hver værdi med EnumMember
  • For særlige formater (datoer, tal) skal du i C# 6 konvertere til en egenskab af typen string (manuel tilknytning)

Tilvalgsregel for JSON

Hurtigt tjek: Hvordan tilvælger du kun bestemte egenskaber til JSON med DataContractJsonSerializer?

Opsummering

Opsummering: Brug DataContractJsonSerializer i C# 6, tilvælg medlemmer med DataMember, justér navne via Name=, og læs og skriv ved hjælp af sikre mønstre for datastrømme.

Gratis at komme i gang

Lær C# med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
93
Lektioner
346

Ofte stillede spørgsmål

Er lektionen “JSON med System.Text.Json (opt-in og converters)” gratis?

Ja — hele teksten til “JSON med System.Text.Json (opt-in og converters)” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 3 lektioner i alt.

Hvad lærer jeg i “JSON med System.Text.Json (opt-in og converters)”?

JSON, der er kompatibel med C# 6: brug DataContractJsonSerializer med [DataContract]/[DataMember] (opt-in-medlemmer), og foretag enkle navnetilpasninger svarende til converters. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C# Academy?

Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 3.

Hvor lang tid tager lektionen “JSON med System.Text.Json (opt-in og converters)”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C# Academy-lektion?

Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. System.IO (stier og streams)
  2. JSON med System.Text.Json (opt-in og converters)
  3. Enkle mønstre til CSV-parsing
← Tilbage til C# Academy