Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memperlihatkan cara menggunakan System.Text.Json namespace untuk mendeserialisasi ke JavaScript Object Notation (JSON). Jika Anda memindahkan kode yang ada dari Newtonsoft.Json, lihat Cara bermigrasi ke System.Text.Json.
Petunjuk / Saran
Anda dapat menggunakan bantuan AI untuk menserialisasikan ke JSON.
Untuk menulis JSON ke string atau file, panggil metode JsonSerializer.Serialize.
Contoh serialisasi
Contoh berikut membuat JSON sebagai string:
using System.Text.Json;
namespace SerializeBasic
{
public class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
}
public class Program
{
public static void Main()
{
var weatherForecast = new WeatherForecast
{
Date = DateTime.Parse("2019-08-01"),
TemperatureCelsius = 25,
Summary = "Hot"
};
string jsonString = JsonSerializer.Serialize(weatherForecast);
Console.WriteLine(jsonString);
}
}
}
// output:
//{"Date":"2019-08-01T00:00:00-07:00","TemperatureCelsius":25,"Summary":"Hot"}
Dim jsonString As String
Output JSON dikurangi (spasi kosong, indentasi, dan karakter baris baru dihapus) secara default.
Contoh berikut menggunakan kode sinkron untuk membuat file JSON:
using System.Text.Json;
namespace SerializeToFile
{
public class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
}
public class Program
{
public static void Main()
{
var weatherForecast = new WeatherForecast
{
Date = DateTime.Parse("2019-08-01"),
TemperatureCelsius = 25,
Summary = "Hot"
};
string fileName = "WeatherForecast.json";
string jsonString = JsonSerializer.Serialize(weatherForecast);
File.WriteAllText(fileName, jsonString);
Console.WriteLine(File.ReadAllText(fileName));
}
}
}
// output:
//{"Date":"2019-08-01T00:00:00-07:00","TemperatureCelsius":25,"Summary":"Hot"}
jsonString = JsonSerializer.Serialize(weatherForecast1)
File.WriteAllText(fileName, jsonString)
Contoh berikut menggunakan kode asinkron untuk membuat file JSON:
using System.Text.Json;
namespace SerializeToFileAsync
{
public class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
}
public class Program
{
public static async Task Main()
{
var weatherForecast = new WeatherForecast
{
Date = DateTime.Parse("2019-08-01"),
TemperatureCelsius = 25,
Summary = "Hot"
};
string fileName = "WeatherForecast.json";
await using FileStream createStream = File.Create(fileName);
await JsonSerializer.SerializeAsync(createStream, weatherForecast);
Console.WriteLine(File.ReadAllText(fileName));
}
}
}
// output:
//{"Date":"2019-08-01T00:00:00-07:00","TemperatureCelsius":25,"Summary":"Hot"}
Dim createStream As FileStream = File.Create(fileName)
Await JsonSerializer.SerializeAsync(createStream, weatherForecast1)
Contoh sebelumnya menggunakan inferensi jenis untuk jenis yang diserialkan. Kelebihan Serialize() membutuhkan parameter jenis generik:
using System.Text.Json;
namespace SerializeWithGenericParameter
{
public class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
}
public class Program
{
public static void Main()
{
var weatherForecast = new WeatherForecast
{
Date = DateTime.Parse("2019-08-01"),
TemperatureCelsius = 25,
Summary = "Hot"
};
string jsonString = JsonSerializer.Serialize<WeatherForecast>(weatherForecast);
Console.WriteLine(jsonString);
}
}
}
// output:
//{"Date":"2019-08-01T00:00:00-07:00","TemperatureCelsius":25,"Summary":"Hot"}
jsonString = JsonSerializer.Serialize(Of WeatherForecastWithPOCOs)(weatherForecast)
Anda juga dapat menggunakan AI untuk menghasilkan kode serialisasi untuk Anda. Untuk mengetahui petunjuknya, lihat bagian Gunakan AI di artikel ini.
Perilaku serialisasi
- Secara default, semua properti publik diserialkan. Anda dapat menentukan properti yang akan diabaikan. Anda juga dapat menyertakan anggota privat.
- Encoder bawaan meloloskan karakter non-ASCII, karakter sensitif HTML dalam rentang ASCII, dan karakter yang harus diloloskan berdasarkan spesifikasi RFC 8259 JSON.
- Secara default, JSON diperkecil. Anda dapat mencetak JSON dengan cantik.
- Secara default, format huruf nama JSON sesuai dengan nama .NET. Anda dapat menyesuaikan casing nama JSON.
- Secara bawaan, referensi melingkar terdeteksi dan pengecualian dilemparkan. Anda dapat mempertahankan referensi dan menangani referensi melingkar.
- Secara bawaan, bidang diabaikan. Anda dapat menyertakan bidang.
Saat Anda menggunakan System.Text.Json secara tidak langsung di aplikasi ASP.NET Core, beberapa perilaku default akan berbeda. Untuk informasi selengkapnya, lihat Pengaturan default web untuk JsonSerializerOptions.
Jenis yang didukung meliputi:
Tipe primitif .NET yang dipetakan ke tipe primitif JavaScript, seperti tipe numerik, string, dan Boolean.
Objek CLR lama polos (POCO) yang ditentukan pengguna.
Array satu dimensi dan bergerigi (
T[][]).Koleksi dan kamus dari namespace berikut:
- System.Collections
- System.Collections.Generic
- System.Collections.Immutable
- System.Collections.Concurrent
- System.Collections.Specialized
- System.Collections.ObjectModel
Untuk informasi selengkapnya, lihat Jenis yang didukung di System.Text.Json.
Anda dapat menerapkan pengonversi kustom untuk menangani jenis tambahan atau menyediakan fungsionalitas yang tidak didukung oleh pengonversi internal.
Berikut adalah contoh yang menunjukkan bagaimana kelas yang berisi properti koleksi dan jenis yang ditentukan pengguna dijadikan serial:
using System.Text.Json;
namespace SerializeExtra
{
public class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
public string? SummaryField;
public IList<DateTimeOffset>? DatesAvailable { get; set; }
public Dictionary<string, HighLowTemps>? TemperatureRanges { get; set; }
public string[]? SummaryWords { get; set; }
}
public class HighLowTemps
{
public int High { get; set; }
public int Low { get; set; }
}
public class Program
{
public static void Main()
{
var weatherForecast = new WeatherForecast
{
Date = DateTime.Parse("2019-08-01"),
TemperatureCelsius = 25,
Summary = "Hot",
SummaryField = "Hot",
DatesAvailable = [DateTime.Parse("2019-08-01"), DateTime.Parse("2019-08-02")],
TemperatureRanges = new Dictionary<string, HighLowTemps>
{
["Cold"] = new HighLowTemps { High = 20, Low = -10 },
["Hot"] = new HighLowTemps { High = 60 , Low = 20 }
},
SummaryWords = ["Cool", "Windy", "Humid"]
};
var options = new JsonSerializerOptions { WriteIndented = true };
string jsonString = JsonSerializer.Serialize(weatherForecast, options);
Console.WriteLine(jsonString);
}
}
}
// Output:
//{
// "Date": "2019-08-01T00:00:00-07:00",
// "TemperatureCelsius": 25,
// "Summary": "Hot",
// "DatesAvailable": [
// "2019-08-01T00:00:00-07:00",
// "2019-08-02T00:00:00-07:00"
// ],
// "TemperatureRanges": {
// "Cold": {
// "High": 20,
// "Low": -10
// },
// "Hot": {
// "High": 60,
// "Low": 20
// }
// },
// "SummaryWords": [
// "Cool",
// "Windy",
// "Humid"
// ]
//}
Public Class WeatherForecastWithPOCOs
Public Property [Date] As DateTimeOffset
Public Property TemperatureCelsius As Integer
Public Property Summary As String
Public SummaryField As String
Public Property DatesAvailable As IList(Of DateTimeOffset)
Public Property TemperatureRanges As Dictionary(Of String, HighLowTemps)
Public Property SummaryWords As String()
End Class
Public Class HighLowTemps
Public Property High As Integer
Public Property Low As Integer
End Class
' serialization output formatted (pretty-printed with whitespace and indentation):
' {
' "Date": "2019-08-01T00:00:00-07:00",
' "TemperatureCelsius": 25,
' "Summary": "Hot",
' "DatesAvailable": [
' "2019-08-01T00:00:00-07:00",
' "2019-08-02T00:00:00-07:00"
' ],
' "TemperatureRanges": {
' "Cold": {
' "High": 20,
' "Low": -10
' },
' "Hot": {
' "High": 60,
' "Low": 20
' }
' },
' "SummaryWords": [
' "Cool",
' "Windy",
' "Humid"
' ]
' }
Serialisasi ke UTF-8
Proses serialisasi ke array byte UTF-8 5-10% lebih cepat dibandingkan dengan metode berbasis string. Itu karena byte (sebagai UTF-8) tidak perlu dikonversi ke string (UTF-16).
Untuk membuat serial ke array byte UTF-8, panggil metode JsonSerializer.SerializeToUtf8Bytes:
byte[] jsonUtf8Bytes = JsonSerializer.SerializeToUtf8Bytes(weatherForecast);
Dim jsonUtf8Bytes As Byte()
Dim options As JsonSerializerOptions = New JsonSerializerOptions With {
.WriteIndented = True
}
jsonUtf8Bytes = JsonSerializer.SerializeToUtf8Bytes(weatherForecast1, options)
Satu pengulangan fungsi dengan Serialize yang menerima Utf8JsonWriter juga tersedia.
Serialisasi ke JSON terformat
Untuk mencetak output JSON dengan cantik, atur JsonSerializerOptions.WriteIndented ke true:
using System.Text.Json;
namespace SerializeWriteIndented
{
public class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
}
public class Program
{
public static void Main()
{
var weatherForecast = new WeatherForecast
{
Date = DateTime.Parse("2019-08-01"),
TemperatureCelsius = 25,
Summary = "Hot"
};
var options = new JsonSerializerOptions { WriteIndented = true };
string jsonString = JsonSerializer.Serialize(weatherForecast, options);
Console.WriteLine(jsonString);
}
}
}
// output:
//{
// "Date": "2019-08-01T00:00:00-07:00",
// "TemperatureCelsius": 25,
// "Summary": "Hot"
//}
Dim options As JsonSerializerOptions = New JsonSerializerOptions With {
.WriteIndented = True
}
jsonString = JsonSerializer.Serialize(weatherForecast, options)
Mulai dari .NET 9, Anda juga dapat menyesuaikan karakter dan ukuran inden menggunakan IndentCharacter dan IndentSize.
Petunjuk / Saran
Jika Anda menggunakan JsonSerializerOptions berulang kali dengan opsi yang sama, jangan buat instans JsonSerializerOptions baru setiap kali menggunakannya. Gunakan kembali "instance" yang sama untuk setiap panggilan. Untuk informasi selengkapnya, lihat Menggunakan kembali instans JsonSerializerOptions.
Menggunakan AI untuk menserialisasikan ke JSON
Anda dapat menggunakan alat AI, seperti GitHub Copilot, untuk menghasilkan kode yang menggunakan System.Text.Json untuk mensereal ke JSON. Anda dapat menyesuaikan perintah agar sesuai dengan bidang objek dan kebutuhan serialisasi Anda.
Berikut adalah contoh perintah yang dapat Anda gunakan untuk menghasilkan kode serialisasi:
I have a variable named weatherForecast of type WeatherForecast.
Serialize the variable using System.Text.Json and write the result directly to a file named "output.json" with the JSON indented for pretty formatting.
Ensure the code includes all necessary using directives and compiles without errors.
Tinjau saran Copilot sebelum menerapkannya.
Untuk informasi selengkapnya tentang GitHub Copilot, lihat FAQ GitHub.