in src/AutoRest.CSharp/Common/Output/Builders/JsonSerializationMethodsBuilder.cs [1187:1272]
public static ValueExpression GetFrameworkTypeValueExpression(Type frameworkType, JsonElementExpression element, SerializationFormat format, CSharpType? serializationType)
{
if (frameworkType == typeof(ETag) ||
frameworkType == typeof(Uri) ||
frameworkType == typeof(ResourceIdentifier) ||
frameworkType == typeof(ResourceType) ||
frameworkType == typeof(ContentType) ||
frameworkType == typeof(RequestMethod) ||
frameworkType == typeof(AzureLocation) ||
frameworkType == typeof(ExtendedLocationType))
{
return New.Instance(frameworkType, element.GetString());
}
if (frameworkType == typeof(IPAddress))
{
return new InvokeStaticMethodExpression(typeof(IPAddress), nameof(IPAddress.Parse), new[] { element.GetString() });
}
if (frameworkType == typeof(BinaryData))
{
return format is SerializationFormat.Bytes_Base64 or SerializationFormat.Bytes_Base64Url
? BinaryDataExpression.FromBytes(element.GetBytesFromBase64(format.ToFormatSpecifier()))
: BinaryDataExpression.FromString(element.GetRawText());
}
if (frameworkType == typeof(Stream))
{
/* BinaryData.FromString(property.Value).ToStream() */
return new BinaryDataExpression(BinaryDataExpression.FromString(element.GetRawText())).ToStream();
}
if (IsCustomJsonConverterAdded(frameworkType) && serializationType is not null)
{
return JsonSerializerExpression.Deserialize(element, serializationType);
}
if (frameworkType == typeof(JsonElement))
return element.InvokeClone();
if (frameworkType == typeof(object))
return element.GetObject();
if (frameworkType == typeof(bool))
return element.GetBoolean();
if (frameworkType == typeof(char))
return element.GetChar();
if (IsIntType(frameworkType))
return GetIntTypeDeserializationValueExpression(element, frameworkType, format);
if (frameworkType == typeof(float))
return element.GetSingle();
if (frameworkType == typeof(double))
return element.GetDouble();
if (frameworkType == typeof(decimal))
return element.GetDecimal();
if (frameworkType == typeof(string))
return element.GetString();
if (frameworkType == typeof(Guid))
return element.GetGuid();
if (frameworkType == typeof(byte[]))
return element.GetBytesFromBase64(format.ToFormatSpecifier());
if (frameworkType == typeof(DateTimeOffset))
{
return format == SerializationFormat.DateTime_Unix
? DateTimeOffsetExpression.FromUnixTimeSeconds(element.GetInt64())
: element.GetDateTimeOffset(format.ToFormatSpecifier());
}
if (frameworkType == typeof(DateTime))
return element.GetDateTime();
if (frameworkType == typeof(TimeSpan))
{
if (format is SerializationFormat.Duration_Seconds)
{
return TimeSpanExpression.FromSeconds(element.GetInt32());
}
if (format is SerializationFormat.Duration_Seconds_Float or SerializationFormat.Duration_Seconds_Double)
{
return TimeSpanExpression.FromSeconds(element.GetDouble());
}
return element.GetTimeSpan(format.ToFormatSpecifier());
}
throw new NotSupportedException($"Framework type {frameworkType} is not supported, please add `CodeGenMemberSerializationHooks` to specify the serialization of this type with the customized property");
}