[Bug]: JsonPropertyName attribute is ignored (does not rename properties as expected)
Describe the bug 🐞
Hello
the [JsonPropertyName("mycustomePropName")] doesn't seems to work, the serializer always output the property name,
for example: in the DummyRequest class below, the url is:
http://localhost/myendpoint/json?All=True&Limit=10
instead of
http://localhost/myendpoint/json?all=True&otherText=10
the [AliasAs("othertext")] works fine, but I don't want to use it Any Idea? Thanks
Step to reproduce
create a new .Net 7 project and paste the following code in program.cs
using System.ComponentModel;
using System.Text.Json.Serialization;
using Refit;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
// Configure Refit
builder.Services
.AddRefitClient<IGithubApi>()
.ConfigureHttpClient(c =>
{
c.BaseAddress = new Uri("http://localhost/");
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
// Test client
var api = app.Services.GetService<IGithubApi>();
var res = api.GetContainers(new DummyRequest() { All = true, Limit = 10 });
app.Run();
public class DummyRequest
{
[JsonPropertyName("all")]
public bool All { get; set; } = true;
[JsonPropertyName("otherText")]
public int Limit { get; set; }
}
interface IGithubApi
{
[Get("/myendpoint/json")]
Task<Container> GetContainers(DummyRequest request);
}
Reproduction repository
https://github.com/reactiveui/refit
Expected behavior
Serialized properties that have the [JsonPropertyName("myPropName")] should be renamed accordingly
Screenshots 🖼️
bellow the sent request

IDE
Visual Studio 2022
Operating system
Windows
Version
11
Device
No response
Refit Version
7.0.0
Additional information ℹ️
No response
Hello, any help?
@7amou3 it's not a bug, it's by design, i've prepared pr, but i think it's odd to use JsonPropertyName for query params, do you have any reasons why you do not want to use AliasAs
I don't want to use AliasAs Because I share a Nuget package that host the models, and I don't want the nuget to have a dependancy on refit
I'm running into the same issue where I want to remove Refit from my core package and reuse the models between my library which I want to support trimming and AOT and a child library which adds a Refit client separately. Supporting the JsonPropertyNameAttribute (or an alternative BCL included attribute) as a replacement for the AliasAsAttribute for query parameters would be helpful to not have my shared models depend on Refit references.
@7amou3 @damidhagor oh i get it, i forgot about that case, PR still on review so we have to wait 😄
@clairernovotny can you check and merge this fix please?
The issue arises because query strings aren't JSON and thus aren't processed in the same way as JSON serialization. While JSON serialization has its own conventions and rules, query strings follow a different set of standards and encoding mechanisms. The two are distinct and require different handling approaches.
Any updates on this?
Any updates on this?
You have to use the AliasAs attribute. Sadly the refit team has not reviewed my PR.
https://github.com/reactiveui/refit?tab=readme-ov-file#api-attributes
GitHub
The automatic type-safe REST library for .NET Core, Xamarin and .NET. Heavily inspired by Square's Retrofit library, Refit turns your REST API into a live interface. - reactiveui/refit
@tcortega, Question: Would it be possible to also add in support for using the formatters for bodies since they also ignore the [JsonPropertyName] attribute? Having one interface for both would cut down on the clutter.
Edit: There was an error with my code, please ignore
@ChrisPulman this should be closed
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.