'Serialize response from post async .NET 6

I am trying to modify the response when serialized. TimeJoined is returned as a string in format hh:mm (GMT +_) and I want to modify as a 24h format, in the instance below would be 14:46

public class Person
{
    public string Name { get; set; }
    public string TimeJoined { get; set; } // "12:46 (GMT +2)"
}

public async Task<Person> GetPerson()
{
    var response = await client.PostAsJsonAsync(url, new { id = "aydt344d" });
    return await response.Content.ReadFromJsonAsync<Person>();
}


Solution 1:[1]

The key for 24h is in the following string format:

hh for 12h format
HH for 24h format
z is for time zone

Lets put that together, something like:

string.Format(DateTime.Now.ToString("HH:mm ({0} z)"), "GMT");

To put that in your person object you can do something like:

var person = await response.Content.ReadFromJsonAsync<Person>(); 
person.TimeJoined = string.Format(DateTime.Now.ToString("HH:mm ({0} z)"), "GMT");
return person;

Or take that format and use it in your customer serializer as the other answer mentioned, that way you can use it overall.

Of course, you can also make a static method and re-used it as well.

Testing that will give time format like this:

15:00 (GMT +2)

Solution 2:[2]

Have a look at this Custom Json Converter

After that, you can create a JsonSerializerOptions (it can be globally) and pass it to ReadFromJsonAsync as a parameter. done!

however, in the Person class the TimeJoined is string so you will need to use TimeSpan or parse time and reformat it to that you want

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Guru Stron