提问人:Gabboxl 提问时间:10/16/2023 最后编辑:dbcGabboxl 更新时间:10/16/2023 访问量:52
在 Refit 请求方法上应用 JsonConverter 属性
Apply JsonConverter attribute on Refit request method
问:
我正在使用 Refit 库开发一个 UWP 应用,以向返回 JSON 数据的 API 发出 HTTP 请求。
我有一个自定义的JsonConverter类。NoteDeserializerNet : JsonConverter<List<Note>>
我以以下方式在另一个类模型上使用该 JsonConverter 类:
public class OverviewResult
{
[JsonPropertyName("lessons")]
public List<Lesson> Lessons { get; set; }
[JsonPropertyName("notes")]
[System.Text.Json.Serialization.JsonConverter(typeof(NoteDeserializerNet))]
public List<Note> NotesResult { get; set; }
}
在这种情况下,我在与 API 的 json 响应上的“notes”对象相对应的属性上使用该 JsonConverter。
我有另一个API端点,它直接返回相同的注释列表,但作为json响应的根对象。
以下是使用 .NET Refit 库从 API 获取数据的方法:
[Get("/students/{userId}/notes/all")]
Task<List<Note>> GetAllNotes(string userId);
我尝试像这样在方法上应用 JsonConverter,但不支持:
[Get("/students/{userId}/notes/all")]
[System.Text.Json.Serialization.JsonConverter(typeof(NoteDeserializerNet))]
Task<List<Note>> GetAllNotes(string userId);
我知道我可以使用 RefitSettings 类为每个请求设置要使用的 JsonConverter,但我需要一个灵活而简单的解决方案,就像第一个示例一样。可能使用属性。
我还尝试创建一个类,该类是该类型的子集:List<Note>
[System.Text.Json.Serialization.JsonConverter(typeof(NoteDeserializerNet))]
public class NotesResult : List<Note>
{}
但它仍然不适用于这两种情况,因为我必须从我的自定义类中返回一个对象而不是一个通用对象。NotesResult
List<Note>
NoteDeserializerNet
我还试图找到一种方法将类内部的属性设置为“根”json路径,以便我可以使用该属性,但显然没有一种简单直接的方法可以做到这一点。JsonConverter
public class NotesResult
{
//how can I set that property to be seen by the deserializer as the "root" json path?
[System.Text.Json.Serialization.JsonConverter(typeof(NoteDeserializerNet))]
public List<Note> Notes { get; set; }
}
如何以最少的代码以简单的方式将 JsonConverter 直接应用于一个 Refit 方法 API 调用?
答: 暂无答案
评论
List<Note>
IEnumerable<Note>
List<Note>
NoteDeserializerNet
SystemTextJsonContentSerializer
时不想添加 to?有没有一种情况,你要退回一个,你不想使用?另外,您能分享一下是什么吗?为 a(而不是项目类型)设置转换器有点不寻常。NoteDeserializerNet
JsonSerializerOptions
List<Note>
NoteDeserializerNet
NoteDeserializerNet
List<T>
T