我想添加全局JsonSerializer选项来使用ReferenceHandler.Preserve,但我无法配置我的blazor服务器应用程序来将其用作所有json Serializer的全局设置。
我以前
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
options.SerializerOptions.PropertyNameCaseInsensitive = true;
});
builder.Services.AddRazorPages().AddJsonOptions(options =>
{
options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
});
builder.Services.Configure<JsonOptions>(o =>
{
o.SerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
o.SerializerOptions.PropertyNameCaseInsensitive = true;
});
没有一个像预期的那样工作,选项没有从默认值更改,我一直得到相同的异常:"JSON值无法转换为"在每个请求中使用相同的选项
var options = new JsonSerializerOptions { ReferenceHandler = ReferenceHandler.Preserve, PropertyNameCaseInsensitive = true };
var httpClient = _httpFactory.CreateClient("API");
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _tokenProvider.JwtToken);
var result = await httpClient.GetFromJsonAsync<List<Manufacturer>>("manufacturer", options);
但是我想定义所有请求的选项,而不是每次都显式地写入它们。
1条答案
按热度按时间kcrjzv8t1#
您可以使用
Typed Client
(甚至使用NSwag
或Refit
生成)来代替Named Client
,并在此类型化API客户机中处理JSON
选项。例如,
NSwag
API客户端生成器具有an option to generateUpdateJsonSerializerSettings
方法,您可以在dAPI客户端类型的基类中定义该方法,如下所示:然后在
DI
上注册ISomeClient
类型的客户端,如下所示:然后,在需要的地方注入
ISomeClient
,并使用类型化的DTOs
调用方法,将所有JSON
序列化/反序列化魔法隐藏起来。文件:关于类型化客户端