/// <summary> /// Gets the <see cref="JsonTypeInfo"/> contract metadata resolved by the current <see cref="JsonSerializerOptions"/> instance. /// </summary> /// <param name="type">The type to resolve contract metadata for.</param> /// <returns>The contract metadata resolved for <paramref name="type"/>.</returns> /// <exception cref="ArgumentNullException"><paramref name="type"/> is <see langword="null"/>.</exception> /// <exception cref="ArgumentException"><paramref name="type"/> is not valid for serialization.</exception> /// <remarks> /// Returned metadata can be downcast to <see cref="JsonTypeInfo{T}"/> and used with the relevant <see cref="JsonSerializer"/> overloads. /// /// If the <see cref="JsonSerializerOptions"/> instance is locked for modification, the method will return a cached instance for the metadata. /// </remarks> public JsonTypeInfo GetTypeInfo(Type type) { if (type is null) { ThrowHelper.ThrowArgumentNullException(nameof(type)); } if (JsonTypeInfo.IsInvalidForSerialization(type)) { ThrowHelper.ThrowArgumentException_CannotSerializeInvalidType(nameof(type), type, null, null); } return(GetTypeInfoInternal(type, resolveIfMutable: true)); }