避免在 System.Text.Json 中分配 属性 名称

avoid property name allocation in System.Text.Json

我正在编写一个基于 System.Text.Json 的自定义 json 序列化程序,从数组中读取 utf-8 字符串。在 examples 中,我发现了以下代码:

string propertyName = reader.GetString();
if (propertyName != "TypeDiscriminator") {
  throw new JsonException();
}

我当然对分配 propertyName 变量不感兴趣,尤其是当它这么长的时候。在发现名称等于预期的文字字符串后,它将被丢弃。

是否可以在不实际获取字符串实例的情况下进行此检查?

使用ValueTextEquals:

if (!reader.ValueTextEquals("TypeDiscriminator"))
{
    throw new JsonException();
}

对于性能关键代码,最好事先转换为 UTF-8:

static readonly byte[] s_TypeDiscriminator =
    Encoding.UTF8.GetBytes("TypeDiscriminator");

if (!reader.ValueTextEquals(s_TypeDiscriminator))
{
    throw new JsonException();
}