.NET'te JSON'u seri hale getirme ve seriden serileştirme (sıralama ve serileştirmeyi geri getirme)

Bu makalede, ad alanını kullanarak seri hale getirme ve seri System.Text.Json durumdan (JSON) JavaScript Nesne Gösterimi gösterir. Mevcut kodu 'dan taşımaya devam ediyorsanız Newtonsoft.Json bkz. 'a geçirme. System.Text.Json

Kod örnekleri

Bu makaledeki kod örnekleri:

  • Kitaplığı doğrudan, örneğin bir çerçeve aracılığıyla değil,doğrudan ASP.NET Core.

  • sınıfından JsonSerializer serileştirmek ve seri halinden serileştirmek için özel türler ile sınıfını kullanın.

    kullanarak JSON verilerini okuma ve yazma hakkında bilgi için JsonSerializer bkz. JSON DOM, Utf8JsonReader ve Utf8JsonWriter kullanma.

  • Yararlı WriteIndented olduğunda JSON'u okunabilirlik için biçimlendirme seçeneğini kullanın.

    Gereksiz boşluk eklemenin performans ve bant genişliği kullanımı üzerinde olumsuz bir etkisi olabilir, çünkü üretim kullanımı için genellikle varsayılan değerini kabul false edersiniz.

  • Aşağıdaki sınıfına ve çeşitlemelere bakın:

    public class WeatherForecast
    {
        public DateTimeOffset Date { get; set; }
        public int TemperatureCelsius { get; set; }
        public string Summary { get; set; }
    }
    
    Public Class WeatherForecast
        Public Property [Date] As DateTimeOffset
        Public Property TemperatureCelsius As Integer
        Public Property Summary As String
    End Class
    

Visual Basic desteği

Başvuru System.Text.Json yapılarının kullanım bölümleri,bu yapı tarafından Visual Basic. Uygulamayla başvuru yapı System.Text.Json API'lerini kullanmayı dener Visual Basic BC40000 derleyici hataları alısabilirsiniz. Hata iletisi, sorunun eski bir API olduğunu gösterir, ancak asıl sorun derleyicide başvuru yapı desteği olmamasıdır. Aşağıdaki bölümleri System.Text.Json aşağıdaki bölümlerden Visual Basic:

  • Utf8JsonReadersınıfı. yöntemi JsonConverter<T>.Read bir parametre Utf8JsonReader alır, bu sınırlama özel dönüştürücüler yazmak için Visual Basic kullanabileceğiniz anlamına gelir. Bunun geçici çözümü, bir C# kitaplık derlemesinde özel dönüştürücüler uygulamak ve VB projenize bu derlemeye başvuru yapmaktır. Bu, tüm bu Visual Basic dönüştürücüleri seri hale getiriciye kaydetmek olduğunu varsayıyor. Dönüştürücülerin yöntemlerini Read koddan çağıra Visual Basic.
  • Tür içeren diğer API'ler için aşırı ReadOnlySpan<T> yüklemeler. Yöntemlerin çoğu yerine kullanan aşırı String yüklemeleri ReadOnlySpan içerir.

Başvuru yapılarının yalnızca "üzerinden veri geçirme" olsa bile dil desteği olmadan güvenli bir şekilde kullanılamaması bu kısıtlamalara neden olur. Bu hatanın tersine çevirerek Visual Basic bozan ve yapılmamış olması gereken bir kodla sonuçlanabilirsiniz.

Ad alanları

Ad System.Text.Json alanı tüm giriş noktalarını ve ana türleri içerir. Ad System.Text.Json.Serialization alanı, gelişmiş senaryolar için öznitelikler ve API'ler ve serileştirme ve seri durumdan kaldırıcıya özgü özelleştirme içerir. Bu makalede gösterilen kod örnekleri, şu using ad alanlarından biri veya her ikisi için yönergeler gerektirir:

using System.Text.Json;
using System.Text.Json.Serialization;
Imports System.Text.Json
Imports System.Text.Json.Serialization

Önemli

ad alanının System.Runtime.Serialization öznitelikleri içinde System.Text.Json desteklenmiyor.

.NET nesnelerini JSON olarak yazma (seri hale getirme)

JSON'u bir dizeye veya dosyaya yazmak için yöntemini JsonSerializer.Serialize çağırabilirsiniz.

Aşağıdaki örnek bir dize olarak JSON oluşturur:

using System;
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

JSON çıkışı varsayılan olarak azaltılır (boşluk, girintileme ve yeni satır karakterleri kaldırılır).

Aşağıdaki örnek, JSON dosyası oluşturmak için zaman uyumlu kodu kullanır:

using System;
using System.IO;
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)

Aşağıdaki örnek, JSON dosyası oluşturmak için zaman uyumsuz kod kullanır:

using System;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;

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";
            using FileStream createStream = File.Create(fileName);
            await JsonSerializer.SerializeAsync(createStream, weatherForecast);
            await createStream.DisposeAsync();

            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)

Yukarıdaki örneklerde, seri hale getirilecek tür için tür çıkarlığı 2. aşırı yüklemesi Serialize() genel tür parametresini alır:

using System;
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)

Serileştirme örneği

Burada koleksiyon özellikleri ve kullanıcı tanımlı tür içeren bir sınıfın nasıl seri hale getir getirll olduğunu gösteren bir örnek ve bir örnek ve bulunmaktadır:

using System;
using System.Collections.Generic;
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 = new List<DateTimeOffset>() 
                    { 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 = new[] { "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"
'   ]
' }

UTF-8'e seri hale getirme

Bir UTF-8 byte dizisine seri hale getirme, dize tabanlı yöntemleri kullanmaya göre yaklaşık %5-10 daha hızlıdır. Fark, baytların (UTF-8 gibi) dizelere dönüştürülmesi gerekmesidir (UTF-16).

Bir UTF-8 byte dizisine serileştirmek için yöntemini JsonSerializer.SerializeToUtf8Bytes çağırın:

byte[] jsonUtf8Bytes =JsonSerializer.SerializeToUtf8Bytes(weatherForecast);
Dim jsonUtf8Bytes As Byte()
Dim options As JsonSerializerOptions = New JsonSerializerOptions With {
    .WriteIndented = True
}
jsonUtf8Bytes = JsonSerializer.SerializeToUtf8Bytes(weatherForecast1, options)

alan Serialize bir aşırı yükleme de Utf8JsonWriter kullanılabilir.

Serileştirme davranışı

Bir System.Text.Json uygulamanın içinde dolaylı ASP.NET Core, bazı varsayılan davranışlar farklıdır. Daha fazla bilgi için bkz. JsonSerializerOptions için web varsayılanları.

Desteklenen türler şunlardır:

Daha fazla bilgi için bkz. System.Text.Json içinde desteklenen koleksiyon türleri.

Ek türleri işlemek veya yerleşik dönüştürücüler tarafından desteklenen işlevler sağlamak için özel dönüştürücüler kullanabilirsiniz.

JSON'u .NET nesneleri olarak okuma (rialize)

JSON'u serisini geri alamanın yaygın bir yolu, önce JSON özelliklerinin bir veya daha fazlasını temsil eden özelliklere ve alanlara sahip bir sınıf oluşturmaktır. Ardından, bir dizeden veya dosyadan dizisini desrialize etmek için yöntemini JsonSerializer.Deserialize çağırabilirsiniz. Genel aşırı yüklemeler için, oluşturduğunuz sınıfın türünü genel tür parametresi olarak iletirsiniz. Genel olmayan aşırı yüklemeler için, oluşturduğunuz sınıfın türünü yöntem parametresi olarak iletirsiniz. Zaman uyumlu veya zaman uyumsuz olarak deserialize. Sınıfınıza temsil edilmeen tüm JSON özellikleri yoksayılır.

Aşağıdaki örnekte, bir JSON dizesinin nasıl dizilimli olduğu gösterir:

using System;
using System.Collections.Generic;
using System.Text.Json;

namespace DeserializeExtra
{
    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()
        {
            string jsonString =
@"{
  ""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""
  ]
}
";
                
            WeatherForecast weatherForecast = 
                JsonSerializer.Deserialize<WeatherForecast>(jsonString);

            Console.WriteLine($"Date: {weatherForecast.Date}");
            Console.WriteLine($"TemperatureCelsius: {weatherForecast.TemperatureCelsius}");
            Console.WriteLine($"Summary: {weatherForecast.Summary}");
        }
    }
}
// output:
//Date: 8/1/2019 12:00:00 AM -07:00
//TemperatureCelsius: 25
//Summary: Hot
weatherForecast = JsonSerializer.Deserialize(Of WeatherForecastWithPOCOs)(jsonString)

Zaman uyumlu kod kullanarak bir dosyadan dizisini dekronize etmek için, aşağıdaki örnekte gösterildiği gibi dosyayı bir dizede okuyun:

using System;
using System.IO;
using System.Text.Json;

namespace DeserializeFromFile
{
    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()
        {
            string fileName = "WeatherForecast.json";
            string jsonString = File.ReadAllText(fileName);
            WeatherForecast weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(jsonString);

            Console.WriteLine($"Date: {weatherForecast.Date}");
            Console.WriteLine($"TemperatureCelsius: {weatherForecast.TemperatureCelsius}");
            Console.WriteLine($"Summary: {weatherForecast.Summary}");
        }
    }
}
// output:
//Date: 8/1/2019 12:00:00 AM -07:00
//TemperatureCelsius: 25
//Summary: Hot
jsonString = File.ReadAllText(fileName)
weatherForecast1 = JsonSerializer.Deserialize(Of WeatherForecast)(jsonString)

Zaman uyumsuz kod kullanarak bir dosyadanrialize etmek için yöntemini DeserializeAsync çağrısı:

using System;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;

namespace DeserializeFromFileAsync
{
    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()
        {
            string fileName = "WeatherForecast.json";
            using FileStream openStream = File.OpenRead(fileName);
            WeatherForecast weatherForecast = 
                await JsonSerializer.DeserializeAsync<WeatherForecast>(openStream);

            Console.WriteLine($"Date: {weatherForecast.Date}");
            Console.WriteLine($"TemperatureCelsius: {weatherForecast.TemperatureCelsius}");
            Console.WriteLine($"Summary: {weatherForecast.Summary}");
        }
    }
}
// output:
//Date: 8/1/2019 12:00:00 AM -07:00
//TemperatureCelsius: 25
//Summary: Hot
Dim openStream As FileStream = File.OpenRead(fileName)
weatherForecast1 = Await JsonSerializer.DeserializeAsync(Of WeatherForecast)(openStream)

İpucu

Serisini kaldırmak istediğiniz JSON'niz varsa ve bunu içine serisinden kaldırmak için sınıfınız yoksa, ihtiyacınız olan sınıfı el ile oluşturmak dışında seçenekleriniz vardır:

UTF-8'den deserialize

UTF-8'denrialize etmek için, aşağıdaki örneklerde gösterildiği gibi bir veya alan JsonSerializer.Deserialize bir aşırı yükleme çağrısı ReadOnlySpan<byte> Utf8JsonReader yapın. Örnekler, JSON'un jsonUtf8Bytes adlı bir bayt dizisinde olduğunu varsayıyor.

var readOnlySpan = new ReadOnlySpan<byte>(jsonUtf8Bytes);
WeatherForecast deserializedWeatherForecast = 
    JsonSerializer.Deserialize<WeatherForecast>(readOnlySpan);
Dim jsonString = Encoding.UTF8.GetString(jsonUtf8Bytes)
weatherForecast1 = JsonSerializer.Deserialize(Of WeatherForecast)(jsonString)
var utf8Reader = new Utf8JsonReader(jsonUtf8Bytes);
WeatherForecast deserializedWeatherForecast = 
    JsonSerializer.Deserialize<WeatherForecast>(ref utf8Reader);
' This code example doesn't apply to Visual Basic. For more information, go to the following URL:
' https://docs.microsoft.com/dotnet/standard/serialization/system-text-json-how-to#visual-basic-support

Deserialization behavior

JSON'unrializing için aşağıdaki davranışlar geçerlidir:

Bir System.Text.Json uygulamanın içinde dolaylı ASP.NET Core, bazı varsayılan davranışlar farklıdır. Daha fazla bilgi için bkz. JsonSerializerOptions için web varsayılanları.

Bir System.Text.Json uygulamanın içinde dolaylı ASP.NET Core, bazı varsayılan davranışlar farklıdır. Daha fazla bilgi için bkz. JsonSerializerOptions için web varsayılanları.

Yerleşik dönüştürücüler tarafından desteklenen işlevler sağlamak için özel dönüştürücüler kullanabilirsiniz.

Biçimlendirilmiş JSON'a seri hale getirme

JSON çıktısını güzel yazdırmak için olarak JsonSerializerOptions.WriteIndented true ayarlayın:

using System;
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)

Aynı JsonSerializerOptions seçeneklerle tekrar tekrar kullanıyorsanız, her kullansanız JsonSerializerOptions yeni bir örnek oluşturmaz. Her çağrı için aynı örneği yeniden kullanma. Daha fazla bilgi için bkz. JsonSerializerOptions örneklerini yeniden kullanma.

Alanları dahil etmek

Aşağıdaki örnekte gösterildiği gibi genel ayarı veya JsonSerializerOptions.IncludeFields [JsonInclude] özniteliğini kullanarak seri hale getirme veya seriden seriden serileştirmeyi geri aken alanları dahil etmek için:

using System;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace Fields
{
    public class Forecast
    {
        public DateTime Date;
        public int TemperatureC;
        public string Summary;
    }

    public class Forecast2
    {
        [JsonInclude]
        public DateTime Date;
        [JsonInclude]
        public int TemperatureC;
        [JsonInclude]
        public string Summary;
    }

    public class Program
    {
        public static void Main()
        {
            var json =
                @"{""Date"":""2020-09-06T11:31:01.923395"",""TemperatureC"":-1,""Summary"":""Cold""} ";
            Console.WriteLine($"Input JSON: {json}");

            var options = new JsonSerializerOptions
            {
                IncludeFields = true,
            };
            var forecast = JsonSerializer.Deserialize<Forecast>(json, options);

            Console.WriteLine($"forecast.Date: {forecast.Date}");
            Console.WriteLine($"forecast.TemperatureC: {forecast.TemperatureC}");
            Console.WriteLine($"forecast.Summary: {forecast.Summary}");

            var roundTrippedJson =
                JsonSerializer.Serialize<Forecast>(forecast, options);

            Console.WriteLine($"Output JSON: {roundTrippedJson}");

            var forecast2 = JsonSerializer.Deserialize<Forecast2>(json);

            Console.WriteLine($"forecast2.Date: {forecast2.Date}");
            Console.WriteLine($"forecast2.TemperatureC: {forecast2.TemperatureC}");
            Console.WriteLine($"forecast2.Summary: {forecast2.Summary}");

            roundTrippedJson = JsonSerializer.Serialize<Forecast2>(forecast2);
            
            Console.WriteLine($"Output JSON: {roundTrippedJson}");
        }
    }
}

// Produces output like the following example:
//
//Input JSON: { "Date":"2020-09-06T11:31:01.923395","TemperatureC":-1,"Summary":"Cold"}
//forecast.Date: 9/6/2020 11:31:01 AM
//forecast.TemperatureC: -1
//forecast.Summary: Cold
//Output JSON: { "Date":"2020-09-06T11:31:01.923395","TemperatureC":-1,"Summary":"Cold"}
//forecast2.Date: 9/6/2020 11:31:01 AM
//forecast2.TemperatureC: -1
//forecast2.Summary: Cold
//Output JSON: { "Date":"2020-09-06T11:31:01.923395","TemperatureC":-1,"Summary":"Cold"}
Imports System.Text.Json
Imports System.Text.Json.Serialization

Namespace Fields

    Public Class Forecast
        Public [Date] As Date
        Public TemperatureC As Integer
        Public Summary As String
    End Class

    Public Class Forecast2

        <JsonInclude>
        Public [Date] As Date

        <JsonInclude>
        Public TemperatureC As Integer

        <JsonInclude>
        Public Summary As String

    End Class

    Public NotInheritable Class Program

        Public Shared Sub Main()
            Dim json As String = "{""Date"":""2020-09-06T11:31:01.923395"",""TemperatureC"":-1,""Summary"":""Cold""}"
            Console.WriteLine($"Input JSON: {json}")

            Dim options As New JsonSerializerOptions With {
                .IncludeFields = True
            }
            Dim forecast1 As Forecast = JsonSerializer.Deserialize(Of Forecast)(json, options)

            Console.WriteLine($"forecast.Date: {forecast1.[Date]}")
            Console.WriteLine($"forecast.TemperatureC: {forecast1.TemperatureC}")
            Console.WriteLine($"forecast.Summary: {forecast1.Summary}")

            Dim roundTrippedJson As String = JsonSerializer.Serialize(forecast1, options)

            Console.WriteLine($"Output JSON: {roundTrippedJson}")

            Dim forecast21 As Forecast2 = JsonSerializer.Deserialize(Of Forecast2)(json)

            Console.WriteLine($"forecast2.Date: {forecast21.[Date]}")
            Console.WriteLine($"forecast2.TemperatureC: {forecast21.TemperatureC}")
            Console.WriteLine($"forecast2.Summary: {forecast21.Summary}")

            roundTrippedJson = JsonSerializer.Serialize(forecast21)

            Console.WriteLine($"Output JSON: {roundTrippedJson}")
        End Sub

    End Class

End Namespace

' Produces output like the following example:
'
'Input JSON: { "Date":"2020-09-06T11:31:01.923395","TemperatureC":-1,"Summary":"Cold"}
'forecast.Date: 9/6/2020 11:31:01 AM
'forecast.TemperatureC: -1
'forecast.Summary: Cold
'Output JSON: { "Date":"2020-09-06T11:31:01.923395","TemperatureC":-1,"Summary":"Cold"}
'forecast2.Date: 9/6/2020 11:31:01 AM
'forecast2.TemperatureC: -1
'forecast2.Summary: Cold
'Output JSON: { "Date":"2020-09-06T11:31:01.923395","TemperatureC":-1,"Summary":"Cold"}

Salt okunur alanları yoksaymak için genel JsonSerializerOptions.IgnoreReadOnlyFields ayarı kullanın.

System.Text.Json.NET Core 3.1'de 'de alanlar desteklenmiyor. Özel dönüştürücüler bu işlevselliği sağlar.

HttpClient ve HttpContent uzantısı yöntemleri

Yaygın işlemler, JSON yüklerini ağdan seri hale getirme ve seriden boşaltma işlemleridir. HttpClient ve HttpContent'deki uzantı yöntemleri, bu işlemleri tek bir kod satırı içinde yapmalarını sağlar. Bu uzantı yöntemleri JsonSerializerOptions için web varsayılanlarını kullanır.

Aşağıdaki örnek ve kullanımını HttpClientJsonExtensions.GetFromJsonAsync HttpClientJsonExtensions.PostAsJsonAsync göstermektedir:

using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

namespace HttpClientExtensionMethods
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Username { get; set; }
        public string Email { get; set; }
    }

    public class Program
    {
        public static async Task Main()
        {
            using HttpClient client = new()
            {
                BaseAddress = new Uri("https://jsonplaceholder.typicode.com")
            };

            // Get the user information.
            User user = await client.GetFromJsonAsync<User>("users/1");
            Console.WriteLine($"Id: {user.Id}");
            Console.WriteLine($"Name: {user.Name}");
            Console.WriteLine($"Username: {user.Username}");
            Console.WriteLine($"Email: {user.Email}");

            // Post a new user.
            HttpResponseMessage response = await client.PostAsJsonAsync("users", user);
            Console.WriteLine(
                $"{(response.IsSuccessStatusCode ? "Success" : "Error")} - {response.StatusCode}");
        }
    }
}

// Produces output like the following example but with different names:
//
//Id: 1
//Name: Tyler King
//Username: Tyler
//Email: Tyler @contoso.com
//Success - Created
Imports System.Net.Http
Imports System.Net.Http.Json

Namespace HttpClientExtensionMethods

    Public Class User
        Public Property Id As Integer
        Public Property Name As String
        Public Property Username As String
        Public Property Email As String
    End Class

    Public Class Program

        Public Shared Async Function Main() As Task
            Using client As New HttpClient With {
                .BaseAddress = New Uri("https://jsonplaceholder.typicode.com")
                }

                ' Get the user information.
                Dim user1 As User = Await client.GetFromJsonAsync(Of User)("users/1")
                Console.WriteLine($"Id: {user1.Id}")
                Console.WriteLine($"Name: {user1.Name}")
                Console.WriteLine($"Username: {user1.Username}")
                Console.WriteLine($"Email: {user1.Email}")

                ' Post a new user.
                Dim response As HttpResponseMessage = Await client.PostAsJsonAsync("users", user1)
                Console.WriteLine(
                $"{(If(response.IsSuccessStatusCode, "Success", "Error"))} - {response.StatusCode}")
            End Using
        End Function

    End Class

End Namespace

' Produces output like the following example but with different names:
'
'Id: 1
'Name: Tyler King
'Username: Tyler
'Email: Tyler @contoso.com
'Success - Created

HttpContent üzerinde System.Text.Json için uzantı yöntemleri de vardır.

ve uzantı yöntemleri HttpClient HttpContent System.Text.Json .NET Core 3.1'de kullanılamaz.

Ayrıca bkz.