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