JsonParameterInfo
namespace System.Text.Json.Serialization.Metadata
{
internal abstract class JsonParameterInfo
{
private JsonTypeInfo _runtimeTypeInfo;
public JsonParameterInfoValues ClrInfo;
public JsonConverter ConverterBase { get; set; }
private protected bool MatchingPropertyCanBeNull { get; set; }
public object DefaultValue { get; set; }
public bool IgnoreDefaultValuesOnRead { get; set; }
public JsonSerializerOptions Options { get; set; }
public byte[] NameAsUtf8Bytes { get; set; }
public JsonNumberHandling? NumberHandling { get; set; }
public JsonTypeInfo RuntimeTypeInfo {
get {
if (_runtimeTypeInfo == null)
_runtimeTypeInfo = Options.GetOrAddClass(RuntimePropertyType);
return _runtimeTypeInfo;
}
set {
_runtimeTypeInfo = value;
}
}
public Type RuntimePropertyType { get; set; }
public bool ShouldDeserialize { get; set; }
public virtual void Initialize(JsonParameterInfoValues parameterInfo, JsonPropertyInfo matchingProperty, JsonSerializerOptions options)
{
ClrInfo = parameterInfo;
Options = options;
ShouldDeserialize = true;
RuntimePropertyType = matchingProperty.RuntimePropertyType;
NameAsUtf8Bytes = matchingProperty.NameAsUtf8Bytes;
ConverterBase = matchingProperty.ConverterBase;
IgnoreDefaultValuesOnRead = matchingProperty.IgnoreDefaultValuesOnRead;
NumberHandling = matchingProperty.NumberHandling;
MatchingPropertyCanBeNull = matchingProperty.PropertyTypeCanBeNull;
}
public static JsonParameterInfo CreateIgnoredParameterPlaceholder(JsonParameterInfoValues parameterInfo, JsonPropertyInfo matchingProperty, bool sourceGenMode)
{
JsonParameterInfo jsonParameterInfo = new JsonParameterInfo<sbyte>();
jsonParameterInfo.ClrInfo = parameterInfo;
jsonParameterInfo.RuntimePropertyType = matchingProperty.RuntimePropertyType;
jsonParameterInfo.NameAsUtf8Bytes = matchingProperty.NameAsUtf8Bytes;
if (sourceGenMode)
jsonParameterInfo.DefaultValue = matchingProperty.DefaultValue;
else {
Type parameterType = parameterInfo.ParameterType;
JsonTypeInfo jsonTypeInfo;
GenericMethodHolder genericMethodHolder = (!matchingProperty.Options.TryGetClass(parameterType, out jsonTypeInfo)) ? GenericMethodHolder.CreateHolder(parameterInfo.ParameterType) : jsonTypeInfo.GenericMethods;
jsonParameterInfo.DefaultValue = genericMethodHolder.DefaultValue;
}
return jsonParameterInfo;
}
}
}