public object Deserialize(JsonReader reader, Type objectType) { return DeserializeInternal(reader, objectType); } internal virtual object DeserializeInternal(JsonReader reader, Type objectType) { …… JsonSerializerInternalReader serializerReader = new JsonSerializerInternalReader(this); object value = serializerReader.Deserialize(traceJsonReader ?? reader, objectType, CheckAdditionalContent); …… return value; }
JsonSerializer会调用JsonSerializerInternalReader类的Deserialize方法将Json字符串内容反序列化。
最终我们看一下JsonSerializerInternalReader中的部分关键代码
public object Deserialize(JsonReader reader, Type objectType, bool checkAdditionalContent) { … JsonConverter converter = GetConverter(contract, null, null, null); if (reader.TokenType == JsonToken.None && !reader.ReadForType(contract, converter != null)) { ...... object deserializedValue; if (converter != null && converter.CanRead) { deserializedValue = DeserializeConvertable(converter, reader, objectType, null); } else { deserializedValue = CreateValueInternal(reader, objectType, contract, null, null, null, null); } } }
JsonSerializerInternalReader类里面的Deserialize方法会尝试根据当前请求参数的类型,去查找并实例化一个合适的JsonConverter。 如果查找到匹配的Converter, 就使用该Converter进行实际的反序列化数据绑定操作。在当前例子中由于api的参数类型是Person,所以它会匹配到PersonJsonConverter, 这就是为什么我们通过添加PersonJsonConverter就完成了多态数据绑定的功能。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章: