Eva*_*nei 5 c# json utf-8 .net-core system.text.json
我正在尝试使用 .json 将字符串 JSON 反序列化为对象System.Text.Json.JsonSerializer。有时,我尝试反序列化的 JSON 中包含无效的 UTF-16 字符。例如,该字符\udcbf无法反序列化为 UTF-16 字符串。我试图遵循此处的准则来自定义字符编码,但这似乎只适用于序列化。
dotnet fiddle来显示问题。请注意,我使用的 JSON 编码器支持从 0x0000 到 0xFFFF 的所有 unicode 字符。这个范围包含 0xDCBF,这让我相信指定的编码器不用于反序列化。
我尝试做的一件事是编写一个自定义转换器来处理这些无效字符:
public class InvalidUtf16Converter : JsonConverter<string>
{
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
try
{
return reader.GetString();
}
catch (InvalidOperationException)
{
var bytes = reader.ValueSpan;
var sb = new StringBuilder(bytes.Length);
foreach (var b in bytes)
sb.Append(Convert.ToChar(b));
return sb.ToString();
}
}
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) =>
writer.WriteStringValue(value);
}
Run Code Online (Sandbox Code Playgroud)
这种做法有点适用于字符串属性(实际上并没有读入一个字符)为看到这里。不幸的是,我有时在列表中有无效的 UTF-16 字符。在这种情况下,提供转换器不工作,因为看到这里,因为转换器试图将一个列表转换成一个字符串,它可以理解的休息。
有没有办法全局处理反序列化中无效的 UTF-16 字符System.Text.Json?如果没有,我将如何为列表编写类似于上述转换器的转换器?