RDG004:无法解析匿名类型
值 | |
---|---|
规则 ID | RDG004 |
修复是中断修复还是非中断修复 | 非中断 |
原因
当终结点包含具有匿名返回类型的路由处理程序时,请求委托生成器会发出此诊断。
规则说明
请求委托生成器在编译时运行,并且需要能够在应用中静态分析路由处理程序。 匿名类型生成时具有仅编译器知晓、不可静态分析的类型名称。 以下终结点生成诊断。
using System.Text.Json.Serialization;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
var app = builder.Build();
app.MapGet("/v1/todos", () => new { Id = 1, Task = "Write tests" });
app.Run();
record Todo(int Id, string Task);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
如何解决冲突
声明返回类型为具体类型的路由处理程序。
using System.Text.Json.Serialization;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
var app = builder.Build();
app.MapGet("/v1/todos", () => new Todo(1, "Write tests fix"));
app.Run();
record Todo(int Id, string Task);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
何时禁止显示警告
可以安全消除此警告。 消除后,框架会回退为在运行时生成请求委托。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈