in src/Elastic.Apm/Libraries/Newtonsoft.Json/Linq/JValue.cs [629:714]
public override void WriteTo(JsonWriter writer, params JsonConverter[] converters)
{
if (converters != null && converters.Length > 0 && _value != null)
{
var matchingConverter = JsonSerializer.GetMatchingConverter(converters, _value.GetType());
if (matchingConverter != null && matchingConverter.CanWrite)
{
matchingConverter.WriteJson(writer, _value, JsonSerializer.CreateDefault());
return;
}
}
switch (_valueType)
{
case JTokenType.Comment:
writer.WriteComment(_value?.ToString());
return;
case JTokenType.Raw:
writer.WriteRawValue(_value?.ToString());
return;
case JTokenType.Null:
writer.WriteNull();
return;
case JTokenType.Undefined:
writer.WriteUndefined();
return;
case JTokenType.Integer:
if (_value is int i)
writer.WriteValue(i);
else if (_value is long l)
writer.WriteValue(l);
else if (_value is ulong ul)
writer.WriteValue(ul);
#if HAVE_BIG_INTEGER
else if (_value is BigInteger integer)
{
writer.WriteValue(integer);
}
#endif
else
writer.WriteValue(Convert.ToInt64(_value, CultureInfo.InvariantCulture));
return;
case JTokenType.Float:
if (_value is decimal dec)
writer.WriteValue(dec);
else if (_value is double d)
writer.WriteValue(d);
else if (_value is float f)
writer.WriteValue(f);
else
writer.WriteValue(Convert.ToDouble(_value, CultureInfo.InvariantCulture));
return;
case JTokenType.String:
writer.WriteValue(_value?.ToString());
return;
case JTokenType.Boolean:
writer.WriteValue(Convert.ToBoolean(_value, CultureInfo.InvariantCulture));
return;
case JTokenType.Date:
#if HAVE_DATE_TIME_OFFSET
if (_value is DateTimeOffset offset)
{
writer.WriteValue(offset);
}
else
#endif
{
writer.WriteValue(Convert.ToDateTime(_value, CultureInfo.InvariantCulture));
}
return;
case JTokenType.Bytes:
writer.WriteValue((byte[]?)_value);
return;
case JTokenType.Guid:
writer.WriteValue(_value != null ? (Guid?)_value : null);
return;
case JTokenType.TimeSpan:
writer.WriteValue(_value != null ? (TimeSpan?)_value : null);
return;
case JTokenType.Uri:
writer.WriteValue((Uri?)_value);
return;
}
throw MiscellaneousUtils.CreateArgumentOutOfRangeException(nameof(Type), _valueType, "Unexpected token type.");
}