이 문서에서는 JSON에서 주석, 후행 쉼표 및 따옴표 붙은 숫자를 허용하는 방법과 숫자를 문자열로 작성하는 방법을 알아봅니다.
메모 및 후행 쉼표 허용
기본적으로 주석 및 후행 쉼표는 JSON에서 허용되지 않습니다. JSON에서 주석을 허용하려면 속성을 JsonSerializerOptions.ReadCommentHandling.로 설정합니다JsonCommentHandling.Skip
.
후행 쉼표가 허용되도록 하려면 속성을 JsonSerializerOptions.AllowTrailingCommas.로 설정합니다true
. 다음 예제에서는 두 가지를 모두 허용하는 방법을 보여 있습니다.
var options = new JsonSerializerOptions
{
ReadCommentHandling = JsonCommentHandling.Skip,
AllowTrailingCommas = true,
};
WeatherForecast weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(
jsonString,
options
)!;
Dim options As JsonSerializerOptions = New JsonSerializerOptions With {
.ReadCommentHandling = JsonCommentHandling.Skip,
.AllowTrailingCommas = True
}
Dim weatherForecast1 = JsonSerializer.Deserialize(Of WeatherForecast)(jsonString, options)
다음은 주석과 후행 쉼표가 있는 JSON 예제입니다.
{
"Date": "2019-08-01T00:00:00-07:00",
"TemperatureCelsius": 25, // Fahrenheit 77
"Summary": "Hot", /* Zharko */
// Comments on
/* separate lines */
}
따옴표 안에 숫자를 허용하거나 씁니다.
일부 serializer는 숫자를 JSON 문자열로 인코딩합니다(따옴표로 묶음).
다음은 그 예입니다.
{
"DegreesCelsius": "23"
}
대신에:
{
"DegreesCelsius": 23
}
숫자를 따옴표로 직렬화하거나 전체 입력 개체 그래프에서 따옴표로 숫자를 허용하려면 다음 예제와 같이 설정합니다 JsonSerializerOptions.NumberHandling .
using System.Text.Json;
using System.Text.Json.Serialization;
namespace QuotedNumbers
{
public class Forecast
{
public DateTime Date { get; init; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
};
public class Program
{
public static void Run()
{
Forecast forecast = new()
{
Date = DateTime.Now,
TemperatureC = 40,
Summary = "Hot"
};
JsonSerializerOptions options = new()
{
NumberHandling =
JsonNumberHandling.AllowReadingFromString |
JsonNumberHandling.WriteAsString,
WriteIndented = true
};
string forecastJson =
JsonSerializer.Serialize<Forecast>(forecast, options);
Console.WriteLine($"Output JSON:\n{forecastJson}");
Forecast forecastDeserialized =
JsonSerializer.Deserialize<Forecast>(forecastJson, options)!;
Console.WriteLine($"Date: {forecastDeserialized.Date}");
Console.WriteLine($"TemperatureC: {forecastDeserialized.TemperatureC}");
Console.WriteLine($"Summary: {forecastDeserialized.Summary}");
}
}
}
// Produces output like the following example:
//
//Output JSON:
//{
// "Date": "2020-10-23T12:27:06.4017385-07:00",
// "TemperatureC": "40",
// "Summary": "Hot"
//}
//Date: 10/23/2020 12:27:06 PM
//TemperatureC: 40
//Summary: Hot
Imports System.Text.Json
Imports System.Text.Json.Serialization
Namespace QuotedNumbers
Public Class Forecast
Public Property [Date] As Date
Public Property TemperatureC As Integer
Public Property Summary As String
End Class
Public NotInheritable Class Program
Public Shared Sub Main()
Dim forecast1 As New Forecast() With {
.[Date] = Date.Now,
.TemperatureC = 40,
.Summary = "Hot"
}
Dim options As New JsonSerializerOptions() With {
.NumberHandling = JsonNumberHandling.AllowReadingFromString Or
JsonNumberHandling.WriteAsString,
.WriteIndented = True
}
Dim forecastJson As String = JsonSerializer.Serialize(forecast1, options)
Console.WriteLine($"Output JSON:{forecastJson}")
Dim forecastDeserialized As Forecast = JsonSerializer.Deserialize(Of Forecast)(forecastJson, options)
Console.WriteLine($"Date: {forecastDeserialized.[Date]}")
Console.WriteLine($"TemperatureC: {forecastDeserialized.TemperatureC}")
Console.WriteLine($"Summary: {forecastDeserialized.Summary}")
End Sub
End Class
End Namespace
' Produces output like the following example:
'
'Output JSON:
'{
' "Date": "2020-10-23T12:27:06.4017385-07:00",
' "TemperatureC": "40",
' "Summary": "Hot"
'}
'Date: 10/23/2020 12:27:06 PM
'TemperatureC: 40
'Summary: Hot
ASP.NET Core를 통해 간접적으로 사용하는 System.Text.Json
경우 ASP.NET Core는 웹 기본 옵션을 지정하기 때문에 역직렬화할 때 따옴표 붙은 숫자가 허용됩니다.
특정 속성, 필드 또는 형식에 따옴표 붙은 숫자를 허용하거나 쓰려면 [JsonNumberHandling] 특성을 사용합니다.
참고하십시오
.NET