in src/JetBrains.Space.Common/Json.Serialization/UrlParameterConverter.cs [41:78]
public override bool CanConvert(Type objectType)
=> typeof(IUrlParameter).IsAssignableFrom(objectType);
/// <inheritdoc />
[CanBeNull]
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.Null) return null;
// Read permission scope
if (typeToConvert == PermissionScopeType && reader.TokenType == JsonTokenType.String)
{
var permissionScopeString = reader.GetString();
return new PermissionScope(permissionScopeString) as T;
}
// Read based on className
var readerAtStart = reader;
using var jsonDocument = JsonDocument.ParseValue(ref reader);
var jsonObject = jsonDocument.RootElement;
var className = jsonObject.GetStringValue("className");
if (!string.IsNullOrEmpty(className))
{
if (ClassNameTypeUtility.TryResolve(
className: className,
spaceDotNetCSharpTypeName: ClassNameTypeUtility.SpaceDotNetClientNamespace + "." + typeToConvert.Name + "+" + CSharpIdentifier.ForClassOrNamespace(className) + ", " + ClassNameTypeUtility.SpaceDotNetClientAssemblyName,
targetType: out var targetType))
{
return JsonSerializer.Deserialize(ref readerAtStart, targetType, options) as T;
}
}
// Read, but return null for other cases
JsonDocument.ParseValue(ref readerAtStart).Dispose();
return null;
}