.NET 6 - 带有 CamelCase 的 AddJsonOptions 不起作用
.NET 6 - AddJsonOptions with CamelCase not working
我已经尝试在 .NET 6 上使用 camelCase insentive 来反序列化来自 API
的内容
我在 Startup.cs 中这样配置,但它不起作用
.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.IgnoreNullValues = true;
});
我要解决这个问题:https://github.com/andre-ss6
https://github.com/dotnet/runtime/issues/31094#issuecomment-543342051
他推荐使用以下代码:
((JsonSerializerOptions)typeof(JsonSerializerOptions)
.GetField("s_defaultOptions",
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.NonPublic).GetValue(null))
.PropertyNameCaseInsensitive = true;
我试过了,但是我觉得很复杂,因为它使用反射,我不知道怎么想的,有人有其他解决方案或解释吗?
我这样反序列化:
var content = await response.Content.ReadAsStringAsync(cancellationToken);
var result = JsonSerializer.Deserialize<InvestimentFundsResponseData>(content);
我的class是,你怎么看到的,我没有使用属性[JsonPropertyName]
public class InvestimentFundsResponseData
{
public IEnumerable<InvestmentFundsResponse> Data { get; set;}
}
public class InvestmentFundsResponse
{
public Guid Id { get; set; }
}
JsonSerializer.Deserialize
不使用由 AddJsonOptions
配置的 JsonSerializerOptions
,手动创建和传递所需的选项(可能通过 JsonOptions
从 DI 解析):
var result = JsonSerializer.Deserialize<InvestimentFundsResponseData>(content, new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
Converters = {new JsonStringEnumConverter()},
IgnoreNullValues = true
});
我已经尝试在 .NET 6 上使用 camelCase insentive 来反序列化来自 API
的内容我在 Startup.cs 中这样配置,但它不起作用
.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.IgnoreNullValues = true;
});
我要解决这个问题:https://github.com/andre-ss6 https://github.com/dotnet/runtime/issues/31094#issuecomment-543342051
他推荐使用以下代码:
((JsonSerializerOptions)typeof(JsonSerializerOptions)
.GetField("s_defaultOptions",
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.NonPublic).GetValue(null))
.PropertyNameCaseInsensitive = true;
我试过了,但是我觉得很复杂,因为它使用反射,我不知道怎么想的,有人有其他解决方案或解释吗?
我这样反序列化:
var content = await response.Content.ReadAsStringAsync(cancellationToken);
var result = JsonSerializer.Deserialize<InvestimentFundsResponseData>(content);
我的class是,你怎么看到的,我没有使用属性[JsonPropertyName]
public class InvestimentFundsResponseData
{
public IEnumerable<InvestmentFundsResponse> Data { get; set;}
}
public class InvestmentFundsResponse
{
public Guid Id { get; set; }
}
JsonSerializer.Deserialize
不使用由 AddJsonOptions
配置的 JsonSerializerOptions
,手动创建和传递所需的选项(可能通过 JsonOptions
从 DI 解析):
var result = JsonSerializer.Deserialize<InvestimentFundsResponseData>(content, new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
Converters = {new JsonStringEnumConverter()},
IgnoreNullValues = true
});