in src/AutoRest.CSharp/Common/Generation/Writers/JsonCodeWriterExtensions.cs [45:158]
public static FormattableString GetFrameworkTypeValueFormattable(Type frameworkType, FormattableString element, SerializationFormat format, CSharpType? serializationType)
{
bool includeFormat = false;
if (frameworkType == typeof(ETag) ||
frameworkType == typeof(Uri) ||
frameworkType == typeof(ResourceIdentifier) ||
frameworkType == typeof(ResourceType) ||
frameworkType == typeof(ContentType) ||
frameworkType == typeof(RequestMethod) ||
frameworkType == typeof(AzureLocation))
{
return $"new {frameworkType}({element}.GetString())";
}
if (frameworkType == typeof(IPAddress))
{
return $"{frameworkType}.Parse({element}.GetString())";
}
var methodName = string.Empty;
if (frameworkType == typeof(BinaryData))
{
switch (format)
{
case SerializationFormat.Bytes_Base64: //intentional fall through
case SerializationFormat.Bytes_Base64Url:
return $"{typeof(BinaryData)}.FromBytes({element}.GetBytesFromBase64(\"{format.ToFormatSpecifier()}\"))";
default:
return $"{typeof(BinaryData)}.FromString({element}.GetRawText())";
}
}
if (frameworkType == typeof(TimeSpan))
{
if (format is SerializationFormat.Duration_Seconds)
{
return $"{typeof(TimeSpan)}.FromSeconds({element}.GetInt32())";
}
else if (format is SerializationFormat.Duration_Seconds_Float or SerializationFormat.Duration_Seconds_Double)
{
return $"{typeof(TimeSpan)}.FromSeconds({element}.GetDouble())";
}
}
if (frameworkType == typeof(DateTimeOffset))
{
if (format == SerializationFormat.DateTime_Unix)
{
return $"{typeof(DateTimeOffset)}.FromUnixTimeSeconds({element}.GetInt64())";
}
}
if (IsCustomJsonConverterAdded(frameworkType))
{
return $"{typeof(JsonSerializer)}.{nameof(JsonSerializer.Deserialize)}<{serializationType}>({element}.GetRawText())";
}
if (frameworkType == typeof(JsonElement))
methodName = "Clone";
if (frameworkType == typeof(object))
methodName = "GetObject";
if (frameworkType == typeof(bool))
methodName = "GetBoolean";
if (frameworkType == typeof(char))
methodName = "GetChar";
if (frameworkType == typeof(short))
methodName = "GetInt16";
if (frameworkType == typeof(int))
methodName = "GetInt32";
if (frameworkType == typeof(long))
methodName = "GetInt64";
if (frameworkType == typeof(float))
methodName = "GetSingle";
if (frameworkType == typeof(double))
methodName = "GetDouble";
if (frameworkType == typeof(decimal))
methodName = "GetDecimal";
if (frameworkType == typeof(string))
methodName = "GetString";
if (frameworkType == typeof(Guid))
methodName = "GetGuid";
if (frameworkType == typeof(byte[]))
{
methodName = "GetBytesFromBase64";
includeFormat = true;
}
if (frameworkType == typeof(DateTimeOffset))
{
methodName = "GetDateTimeOffset";
includeFormat = true;
}
if (frameworkType == typeof(DateTime))
{
methodName = "GetDateTime";
includeFormat = true;
}
if (frameworkType == typeof(TimeSpan))
{
methodName = "GetTimeSpan";
includeFormat = true;
}
if (includeFormat && format.ToFormatSpecifier() is { } formatString)
{
return $"{element}.{methodName}({formatString:L})";
}
return $"{element}.{methodName}()";
}