Används för att serialisera ett objekt till en JSON-string.
Pokemon poke = new Pokemon()
{
Name = "Ditto",
Id = 132,
IsDefault = true,
Species = new PokemonSpecies() {
Name = "ditto",
Url = "https://pokeapi.co/api/v2/pokemon-species/132/"
}
};
string json = JsonSerializer.Serialize<Pokemon>(poke);
JsonSerializerOptions
Genom att skicka in ett JsonSerializerOptions-objekt kan man ge mer detaljerade instruktioner till serializern.
JsonSerializerOptions options = new ()
{
// Ger snygg, indenterad JSON-kod
WriteIndented = true,
// Omvandlar alla property-namn till snake_case
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower // döper om properties
};
string json = JsonSerializer.Serialize<Pokemon>(poke, options);
OBS: SnakeCaseLower introducerades i dotnet 8!
JsonSerializer.Deserialize<>()
Används för att deserialisera ett objekt från en JSON-string.
// jsonString innehåller json-data. Den kan t.ex. läsas in från en json-fil
// eller hämtas från en REST-server.
Pokemon ditto = JsonSerializer.Deserialize<Pokemon>(jsonString);
Attribut
OBS: dessa kräver att du inkluderar System.Text.Json.Serialization.
[JsonInclude]
Används för att inkludera en variabel eller property i Json-serialiseringen
using System.Text.Json.Serialization;
public class Pokemon
{
[JsonInclude]
public string Name;
[JsonInclude]
public bool IsDefault;
}
[JsonIgnore]
Används för att se till så att en variabel eller property på C#-sidan inte serialiseras till JSON.
Pokemon.cs
using System.Text.Json.Serialization;
public class Pokemon
{
public string Name {get; set;}
public bool IsDefault {get; set;}
[JsonIgnore]
public int CurrentHp {get; set;}
}
[JsonPropertyName()]
Med attributet [JsonPropertyName()] kan man bestämma att en C#-klass' property ska matchas mot ett JSON-värde med annat namn.
Pokemon.cs
using System.Text.Json.Serialization;
class Pokemon
{
public string Name {get; set;}
public int Id {get; set;}
[JsonPropertyName("is_default")]
public bool IsDefault {get; set;}
}
Deserialisering av listor
Ibland beskriver JSON-kod listor av objekt eller värden. De kännetecknas av att ge omges av hakparenteser [].
För att deserialisera dessa, skapa klasser som beskriver de inre objekten.
PokemonSpecies.cs
class PokemonSpecies
{
[JsonPropertyName("name")]
public string Name {get; set;}
[JsonPropertyName("url")]
public string Url {get; set;}
}
Pokemon.cs
class Pokemon
{
[JsonPropertyName("name")]
public string Name {get; set;}
[JsonPropertyName("species")]
public PokemonSpecies Species {get; set;}
}
Om du ska deserialisera JSON-kod som du får från något annat ställe och inte designat själv, så behöver du vara noga med att matcha namnet på dina publika variabler/mot JSON-kodens. Serialiseringsprocessen är normalt känslig vad gäller stora och små bokstäver, men du kan ändra på detta (rekommenderas!).
Denna string kan sedan lagras i en textfil eller t.ex. skickas som svar på ett -anrop.
I JSON används oftast snake_case, medan C# ju använder .
Mer om attribut .
För att deserialisera dessa, skapa helt enkelt publika i klassen.