【发布时间】:2021-03-23 02:30:45
【问题描述】:
我有一个User 类,它有一个ISet<Role> 类型的属性Roles,其中Role 是一个enum 类型。在 JSON 中,我得到了该属性的数组(例如,"Roles":["Admin","User"])。如何编写自定义转换器将此数组转换为ISet 集合?
我试过写这个类:
class CustomStringToRoleConverter : JsonConverter<ISet<User.Role>> {
public override ISet<User.Role> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
return null;
}
public override void Write(Utf8JsonWriter writer, ISet<User.Role> roles, JsonSerializerOptions options) {
StringBuilder builder = new StringBuilder();
builder.Append(string.Join(",", roles.Select(role => role.ToString()).ToArray()));
writer.WriteStartArray();
writer.WriteStringValue(builder.ToString());
writer.WriteEndArray();
}
}
但我不知道在Read 方法中做什么。如何从Utf8JsonReader 获取数组?有一个GetString 方法,但是当我调用它时它会抛出异常:
InvalidOperationException:无法获取令牌类型的值 'StartArray' 作为字符串。
我正在使用System.Text 和System.Text.Json。
【问题讨论】:
-
我会创建数据结构并创建自己的解析函数。
标签: c# json system.text.json