Unix timestamp and boolean converters for Json.NET
Hi everyone! Today I want to talk about two little additional converters for Json.NET which can make your life easier and more fun.
A few weeks ago, I decided to wrote a simple api-consumer. While I was creating this app I found some problems with transformation data from json to objects.
For solving them I created two converters for Json.NET
Unix timestamp to DateTime
An api returns dates in format of unix timestamps, So, what should we do? Exactly, create our owncustom converter. I did all the job for you. You can grab it from nuget
Install-Package UnixTimeConverter
or get it from Github and change code if you want. But it will be better, if you create a pr ;)
#### Example of UnixTimeConverter usage
namespace UsageExample
{
public class ApiData
{
[JsonConverter(typeof(UnixTimeConverter))]
public DateTime Date { get; set; }
}
public class ConverterTest
{
[Fact]
public void HappyPath()
{
//Arrange
var apiJson = "{ Date : 1321009871 }";
//Act
var result = JsonConvert.DeserializeObject<ApiData>(apiJson);
//Assert
Assert.Equal(new DateTime(2011, 11, 11, 11, 11, 11, DateTimeKind.Utc), result.Date);
}
}
}
Number to bool converter for Json.NET
My second problem was about convertingbooleans from numbers. It's a common situation when endpoint returns "bool" values as 1 or 0.
So, I've solved this problem too. You can install converter
Install-Package BooleanConverter
or get it from Github
#### Example of BooleanConverter usage
namespace UsageExample
{
public class ApiData
{
[JsonConverter(typeof(BooleanConverter))]
public bool Field { get; set; }
}
public class ConverterTest
{
[Fact]
public void SerializeHappyPath()
{
//Arrange
var apiJson = "{ Field : 1}";
//Act
var result = JsonConvert.DeserializeObject<ApiData>(apiJson);
//Assert
Assert.Equal(true, result.Field);
}
}
}
P.S.
I asked maintainerJson.NET about PR with converters to the library. But I was given an answer, that he didn't like the idea of adding code to core library due to size issues.
Github's issue