我正在尝试使用自定义 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
仍将保留完整的属性名称。