JsonParameterInfo
using System.Runtime.CompilerServices;
namespace System.Text.Json.Serialization.Metadata
{
internal abstract class JsonParameterInfo
{
private JsonTypeInfo _jsonTypeInfo;
public JsonParameterInfoValues ClrInfo;
public JsonConverter ConverterBase { get; set; }
private bool MatchingPropertyCanBeNull {
[CompilerGenerated]
set {
MatchingPropertyCanBeNull = value;
}
}
public object DefaultValue { get; set; }
public bool IgnoreNullTokensOnRead { get; set; }
public JsonSerializerOptions Options { get; set; }
public byte[] NameAsUtf8Bytes { get; set; }
public JsonNumberHandling? NumberHandling { get; set; }
public JsonTypeInfo JsonTypeInfo => _jsonTypeInfo ?? (_jsonTypeInfo = Options.GetTypeInfoInternal(PropertyType, true, false));
public Type PropertyType { get; set; }
public bool ShouldDeserialize { get; set; }
public JsonPropertyInfo MatchingProperty { get; set; }
public virtual void Initialize(JsonParameterInfoValues parameterInfo, JsonPropertyInfo matchingProperty, JsonSerializerOptions options)
{
MatchingProperty = matchingProperty;
ClrInfo = parameterInfo;
Options = options;
ShouldDeserialize = true;
PropertyType = matchingProperty.PropertyType;
NameAsUtf8Bytes = matchingProperty.NameAsUtf8Bytes;
ConverterBase = matchingProperty.EffectiveConverter;
IgnoreNullTokensOnRead = matchingProperty.IgnoreNullTokensOnRead;
NumberHandling = matchingProperty.EffectiveNumberHandling;
MatchingPropertyCanBeNull = matchingProperty.PropertyTypeCanBeNull;
}
public static JsonParameterInfo CreateIgnoredParameterPlaceholder(JsonParameterInfoValues parameterInfo, JsonPropertyInfo matchingProperty, bool sourceGenMode)
{
JsonParameterInfo jsonParameterInfo = new JsonParameterInfo<sbyte>();
jsonParameterInfo.ClrInfo = parameterInfo;
jsonParameterInfo.PropertyType = matchingProperty.PropertyType;
jsonParameterInfo.NameAsUtf8Bytes = matchingProperty.NameAsUtf8Bytes;
if (sourceGenMode)
jsonParameterInfo.DefaultValue = matchingProperty.DefaultValue;
else {
Type parameterType = parameterInfo.ParameterType;
JsonTypeInfo typeInfo;
DefaultValueHolder defaultValueHolder = (!matchingProperty.Options.TryGetTypeInfoCached(parameterType, out typeInfo)) ? DefaultValueHolder.CreateHolder(parameterInfo.ParameterType) : typeInfo.DefaultValueHolder;
jsonParameterInfo.DefaultValue = defaultValueHolder.DefaultValue;
}
return jsonParameterInfo;
}
}
}