public object? ToObject()

in src/Elastic.Apm/Libraries/Newtonsoft.Json/Linq/JToken.cs [1623:1739]


		public object? ToObject(Type objectType)
		{
			if (JsonConvert.DefaultSettings == null)
			{
				var typeCode = ConvertUtils.GetTypeCode(objectType, out var isEnum);

				if (isEnum)
				{
					if (Type == JTokenType.String)
					{
						try
						{
							// use serializer so JsonConverter(typeof(StringEnumConverter)) + EnumMemberAttributes are respected
							return ToObject(objectType, JsonSerializer.CreateDefault());
						}
						catch (Exception ex)
						{
							var enumType = objectType.IsEnum() ? objectType : Nullable.GetUnderlyingType(objectType);
							throw new ArgumentException(
								"Could not convert '{0}' to {1}.".FormatWith(CultureInfo.InvariantCulture, (string?)this, enumType.Name), ex);
						}
					}

					if (Type == JTokenType.Integer)
					{
						var enumType = objectType.IsEnum() ? objectType : Nullable.GetUnderlyingType(objectType);
						return Enum.ToObject(enumType, ((JValue)this).Value);
					}
				}

				switch (typeCode)
				{
					case PrimitiveTypeCode.BooleanNullable:
						return (bool?)this;
					case PrimitiveTypeCode.Boolean:
						return (bool)this;
					case PrimitiveTypeCode.CharNullable:
						return (char?)this;
					case PrimitiveTypeCode.Char:
						return (char)this;
					case PrimitiveTypeCode.SByte:
						return (sbyte)this;
					case PrimitiveTypeCode.SByteNullable:
						return (sbyte?)this;
					case PrimitiveTypeCode.ByteNullable:
						return (byte?)this;
					case PrimitiveTypeCode.Byte:
						return (byte)this;
					case PrimitiveTypeCode.Int16Nullable:
						return (short?)this;
					case PrimitiveTypeCode.Int16:
						return (short)this;
					case PrimitiveTypeCode.UInt16Nullable:
						return (ushort?)this;
					case PrimitiveTypeCode.UInt16:
						return (ushort)this;
					case PrimitiveTypeCode.Int32Nullable:
						return (int?)this;
					case PrimitiveTypeCode.Int32:
						return (int)this;
					case PrimitiveTypeCode.UInt32Nullable:
						return (uint?)this;
					case PrimitiveTypeCode.UInt32:
						return (uint)this;
					case PrimitiveTypeCode.Int64Nullable:
						return (long?)this;
					case PrimitiveTypeCode.Int64:
						return (long)this;
					case PrimitiveTypeCode.UInt64Nullable:
						return (ulong?)this;
					case PrimitiveTypeCode.UInt64:
						return (ulong)this;
					case PrimitiveTypeCode.SingleNullable:
						return (float?)this;
					case PrimitiveTypeCode.Single:
						return (float)this;
					case PrimitiveTypeCode.DoubleNullable:
						return (double?)this;
					case PrimitiveTypeCode.Double:
						return (double)this;
					case PrimitiveTypeCode.DecimalNullable:
						return (decimal?)this;
					case PrimitiveTypeCode.Decimal:
						return (decimal)this;
					case PrimitiveTypeCode.DateTimeNullable:
						return (DateTime?)this;
					case PrimitiveTypeCode.DateTime:
						return (DateTime)this;
#if HAVE_DATE_TIME_OFFSET
                    case PrimitiveTypeCode.DateTimeOffsetNullable:
                        return (DateTimeOffset?)this;
                    case PrimitiveTypeCode.DateTimeOffset:
                        return (DateTimeOffset)this;
#endif
					case PrimitiveTypeCode.String:
						return (string?)this;
					case PrimitiveTypeCode.GuidNullable:
						return (Guid?)this;
					case PrimitiveTypeCode.Guid:
						return (Guid)this;
					case PrimitiveTypeCode.Uri:
						return (Uri?)this;
					case PrimitiveTypeCode.TimeSpanNullable:
						return (TimeSpan?)this;
					case PrimitiveTypeCode.TimeSpan:
						return (TimeSpan)this;
#if HAVE_BIG_INTEGER
                    case PrimitiveTypeCode.BigIntegerNullable:
                        return ToBigIntegerNullable(this);
                    case PrimitiveTypeCode.BigInteger:
                        return ToBigInteger(this);
#endif
				}
			}

			return ToObject(objectType, JsonSerializer.CreateDefault());
		}