本文主要介绍.NET Core 3.0中,使用JsonSerializer(System.Text.Json)时,自定义 JSON 名称及自定义各个属性名称,以及允许注释和尾随逗号的方法。

1、配置JsonSerializer允许注释和尾随逗号

默认情况下,JSON 中不允许使用注释和尾随逗号。 若要允许 JSON 中的注释,请将 JsonSerializerOptions.ReadCommentHandling 属性设置为 JsonCommentHandling.Skip。 若要允许尾随逗号,请将 JsonSerializerOptions.AllowTrailingCommas 属性设置为 true。 下面的示例演示如何允许两种方法:

var options = new JsonSerializerOptions
{
ReadCommentHandling = JsonCommentHandling.Skip,
AllowTrailingCommas = true
};
var weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(json, options);

下面是包含注释和尾随逗号的示例 JSON:

{
  "Date": "2019-08-01T00:00:00-07:00",
  "TemperatureC": 25, // Fahrenheit 77
  "Summary": "Hot", /* Zharko */
}

2、配置JsonSerializer自定义 JSON 名称及自定义各个属性名称

默认情况下,JSON 输出中的属性名称和字典键不变,包括大小写。 有关详细信息,请参阅 GitHub 上的 dotnet/corefx 存储库中的枚举 camel 大小写支持问题

自定义各个属性名称

若要设置单个属性的名称,请使用[JsonPropertyName]属性。

下面是序列化和生成的 JSON 的示例类型:

class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureC { get; set; }
public string Summary { get; set; }
[JsonPropertyName("Wind")]
public int WindSpeed { get; set; }
}

序列化JSON格式:

{
"Date": "2019-08-01T00:00:00-07:00",
"TemperatureC": 25,
"Summary": "Hot",
"Wind": 35
}

对所有 JSON 属性名称使用 camel 大小写

若要对所有 JSON 属性名称使用 camel 大小写,请将 JsonSerializerOptions.PropertyNamingPolicy 设置为 JsonNamingPolicy.CamelCase,如以下示例中所示:

var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
json = JsonSerializer.Serialize(weatherForecast, options);

下面是一个用于序列化和 JSON 输出的示例类:

class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureC { get; set; }
public string Summary { get; set; }
[JsonPropertyName("Wind")]
public int WindSpeed { get; set; }
}

序列化JSON格式:

{
"date": "2019-08-01T00:00:00-07:00",
"temperatureC": 25,
"summary": "Hot",
"Wind": 35
}

使用自定义 JSON 属性命名策略

若要使用自定义 JSON 属性命名策略,请创建一个派生自 @no__t 0 的类,并重写 ConvertName 方法,如以下示例中所示:

class UpperCaseNamingPolicy : JsonNamingPolicy
{
public override string ConvertName(string name)
{
return name.ToUpper();
}
}

然后,将 JsonSerializerOptions.PropertyNamingPolicy 属性设置为命名策略类的实例:

var options = new JsonSerializerOptions
{
PropertyNamingPolicy = new UpperCaseNamingPolicy()
};
json = JsonSerializer.Serialize(weatherForecast, options);

下面是一个用于序列化和 JSON 输出的示例类:

class WeatherForecast
{
public DateTimeOffset Date { get; set; }
public int TemperatureC { get; set; }
public string Summary { get; set; }
[JsonPropertyName("Wind")]
public int WindSpeed { get; set; }
}

序列化JSON格式:

{
"DATE": "2019-08-01T00:00:00-07:00",
"TEMPERATUREC": 25,
"SUMMARY": "Hot",
"Wind": 35
}

相关文档.NET Core 3.0使用JsonSerializer(System.Text.Json)序列化和反序列化JSON

官方文档https://docs.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json-how-to