我正在尝试使用自定义的ContractResolver来编写节省空间的JSON序列化,该自定义的ContractResolver会覆盖ResolvePropertyName
方法以生成更短的属性名称:
internal class MapContractResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return GetShortNameOf(propertyName);
}
}
现在,我必须反过来反序列化。我有一个名为GetPropertyName(string shortName)
的方法,但我不知道在哪里调用它。我可以覆盖一个合适的方法吗?
答案 0 :(得分:3)
好。诀窍是不要覆盖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
仍将保留完整的媒体资源名称。