使用 JsonEncodedText。
JsonEncodedText 是 System.Text.Json 中的一个类型,用于存储常见的 JSON 属性名称。通过使用它,可以避免在每次序列化和反序列化时分配重复的字符串,从而提高性能。
下面是一个示例代码,演示了 JsonEncodedText 的使用:
using System.Text.Json;
public class Person
{
// 避免在每次序列化和反序列化时分配重复的字符串
private static readonly JsonEncodedText nameProperty = JsonEncodedText.Encode("name");
private static readonly JsonEncodedText ageProperty = JsonEncodedText.Encode("age");
public string Name { get; set; }
public int Age { get; set; }
public void Serialize(Utf8JsonWriter writer)
{
writer.WriteStartObject();
writer.WriteString(nameProperty, Name);
writer.WriteNumber(ageProperty, Age);
writer.WriteEndObject();
}
public static Person Deserialize(ReadOnlySpan utf8Json)
{
var reader = new Utf8JsonReader(utf8Json);
string name = null;
int age = 0;
while (reader.Read())
{
if (reader.TokenType == JsonTokenType.PropertyName)
{
var propertyName = reader.GetPropertyName();
if (propertyName.Equals(nameProperty.EncodedUtf8Bytes))
{
reader.Read();
name = reader.GetString();
}
else if (propertyName.Equals(ageProperty.EncodedUtf8Bytes))
{
reader.Read();
age = reader.GetInt32();
}
}
}
return new Person { Name = name, Age = age };
}
}
在上面的示例中,我们使用 JsonEncodedText 将属性名称“name”和“age”编码为静态只读字段。在序列化时,我们调用 Utf8JsonWriter 的 WriteString 和 WriteNumber 方法,并传递相应的 JsonEncodedText。在反序列化时,我们使用 Utf8JsonReader 的 GetPropertyName 方法来比较属性名称,并使用 JsonEncodedText 的 EncodedUtf8Bytes 属性获取属性名称的编