如何反序列化使用协定解析程序解析属性名称编写的属性

本文关键字:属性 程序 反序列化 | 更新日期: 2023-09-27 17:55:41

我正在尝试使用自定义 ContractResolver 编写节省空间的 JSON 序列化,该 ContractResolver 重写 ResolvePropertyName 方法以生成更短的属性名称:

internal class MapContractResolver : DefaultContractResolver
{
    protected override string ResolvePropertyName(string propertyName)
    {
        return GetShortNameOf(propertyName);
    }
}

现在,我必须反转以进行反序列化。我有一个名为GetPropertyName(string shortName)的方法,但我不知道在哪里称呼它。有没有合适的方法可以覆盖?

如何反序列化使用协定解析程序解析属性名称编写的属性

好的。诀窍是不重写ResolvePropertyName而是覆盖CreateProperty,这是为序列化和反序列化调用的,如下所示:

    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty jsonProperty = base.CreateProperty(member, memberSerialization);
        jsonProperty.PropertyName = GetShortNameOf(jsonProperty.PropertyName);
        return jsonProperty;
    }

注意:jsonProperty.UnderlyingName仍将保留完整的属性名称。