Runtime

WriteLine ile JSON Lines yazmayı bırakın: .NET 11 bunu sizin için yapıyor

.NET 11, System.Text.Json'a JSON Lines (JSONL) yazan yeni overload'lar ekliyor: SerializeAsyncEnumerable artık bir IAsyncEnumerable<T> içeriğini Stream veya PipeWriter'a tek çağrıda aktarabiliyor. topLevelValues: true verildiğinde her kayıt kompakt biçimde ve sonunda LF ile yazılıyor, böylece elle kurulan WriteLine döngülerinin ürettiği bozuk dosyalar ortadan kalkıyor. Özellik .NET 11 RC 2'de mevcut, henüz GA değil.

Yayın tarihi
Okuma süresi
5 dk okuma
agent çalıştırması #25
agent çalıştırması #25
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • SerializeAsyncEnumerable, IAsyncEnumerable<T> alıp Stream veya PipeWriter'a yazan dört yeni overload ile geliyor.
  • topLevelValues: true JSONL üretir; varsayılan false değeri eskisi gibi tek bir JSON dizisi yazar.
  • JSONL modunda WriteIndented ve NewLine yok sayılır, satır sonu her zaman LF olur; son kayıttan sonra da LF eklenir.
  • PipeWriter overload'u ASP.NET Core'da Response.BodyWriter ile doğrudan kullanılıp kayıtları üretildikçe akıtıyor.
  • Native AOT ve file-based app'lerde RequiresDynamicCode nedeniyle source-generated JsonTypeInfo alan overload tercih edilmeli.
  • Özellik yalnızca .NET 11'de var; .NET 10'da DeserializeAsyncEnumerable tarafı vardı, SerializeAsyncEnumerable hiç yoktu.

.NET 11, System.Text.Json'ın uzun süredir okuma tarafında sunduğu JSON Lines desteğine yazma tarafını da ekliyor: IAsyncEnumerable<T> alıp bir Stream ya da PipeWriter'a yazan dört yeni JsonSerializer.SerializeAsyncEnumerable overload'u geldi. topLevelValues: true verildiğinde her değer kompakt biçimde ve sonuna LF eklenerek yazılıyor; WriteIndented ile NewLine bilinçli olarak yok sayılıyor, varsayılan davranış ise tek bir dizi üretmeye devam ediyor. Yazarın denemesinde iki kayıt 78 byte ve iki LF tuttu; elle yazılan WriteLineAsync döngüsü aynı veri için 114 byte ve on satır üretti.

PipeWriter overload'u ASP.NET Core için biçilmiş kaftan: Response.BodyWriter zaten bir PipeWriter, böylece kayıtlar dizi kapanmadan istemciye ulaşıyor. Dikkat edilmesi gerekenler: yalnızca .NET 11'de var (RC 2, go-live lisansı, henüz GA değil), sadece IAsyncEnumerable<T> kabul ediyor ve Native AOT ya da file-based app kullanıyorsanız source-generated JsonTypeInfo overload'una geçmeniz gerekiyor.

Gerçek dünyada kullanımı

  • Milyonlarca satırı tek seferde belleğe almadan JSONL olarak dışa aktaran bir veri export endpoint'i.
  • Büyük veri kümelerini sayfa sayfa okuyup sonuçları satır satır istemciye akıtan bir ASP.NET Core minimal API.
  • Üretimde yazılan JSONL log dosyalarının sonradan DeserializeAsyncEnumerable ile tekrar okunup işlendiği arka plan worker'ları.
  • Yeni kayıtların dosya sonuna eklenerek biriktiği, tüm dosyanın yeniden yazılmadığı denetim kayıtları.

Neden önemli

JSONL üreten kod artık elle kurulan serileştirme döngülerine ve format seçeneklerinin sessizce bozduğu dosyalara bağlı değil; tek çağrı hem doğru formatı hem de gerçek streaming davranışını garanti ediyor.

Bu özet, DEV Community: #csharp üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü