I want set property names at runtime. I already achieve this for serialization.
For example. I have a simple model like as below:
[JsonConverter(typeof(DataModelConverter))]
public class DataModel
{
    public string Name { get; set; }
    public int Age { get; set; }
}
And I have a simple DataModelConverter, that inherited from JsonConverter:
public class DataModelConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        Type type = value.GetType();
        JObject jo = new JObject();
        foreach (PropertyInfo prop in type.GetProperties())
        {
            jo.Add(prop.Name == "Name" ? "FullName" : prop.Name, new JValue(prop.GetValue(value)));
        }
        jo.WriteTo(writer);
    }
    public override bool CanRead
    {
        get { return false; }
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DataModel);
    }
}
And I have a simple controller like as below:
[Route("api/[controller]")]
[ApiController]
public class NewtonController : ControllerBase
{
    public IEnumerable<DataModel> GetNewtonDatas([FromBody] DataModel input)
    {
        return new List<DataModel>()
        {
            new DataModel
            {
                Name="Ramil",
                Age=25
            },
            new DataModel
            {
                Name="Yusif",
                Age=26
            }
        };
    }
}
If I call this API, result will like as below (Showing FullName Instead of Name):
[
   {
       "FullName": "Ramil",
       "Age": 25
   },
   {
       "FullName": "Yusif",
       "Age": 26
   }
]
But I have a problem. This is not working for deserialization.
For example: If I call this API with  this body, then Name will null.
{
   "FullName":"Ramil"
}
My attribute is not working for deserialization. I want set property name via attribute for deserialization at runtime .
I don't want use some middleware, I want to achieve this only by using the any attribute at runtime. I must read JSON property names from my appsettings.json file.
Thanks for help!
 
    