https://github.com/bytedev/bytedev.json.systemtextjson
.NET Standard library of functionality built on System.Text.Json.
https://github.com/bytedev/bytedev.json.systemtextjson
Last synced: 9 months ago
JSON representation
.NET Standard library of functionality built on System.Text.Json.
- Host: GitHub
- URL: https://github.com/bytedev/bytedev.json.systemtextjson
- Owner: ByteDev
- License: mit
- Created: 2021-08-04T04:48:53.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-03-15T07:47:33.000Z (almost 2 years ago)
- Last Synced: 2025-03-28T02:04:35.344Z (10 months ago)
- Language: C#
- Size: 54.7 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://ci.appveyor.com/project/bytedev/ByteDev-Json-SystemTextJson/branch/master)
[](https://www.nuget.org/packages/ByteDev.Json.SystemTextJson)
[](https://github.com/ByteDev/ByteDev.Json.SystemTextJson/blob/master/LICENSE)
# ByteDev.Json.SystemTextJson
.NET Standard library of functionality built on [System.Text.Json](https://www.nuget.org/packages/System.Text.Json/).
## Installation
ByteDev.Json.SystemTextJson is hosted as a package on nuget.org. To install from the Package Manager Console in Visual Studio run:
`Install-Package ByteDev.Json.SystemTextJson`
Further details can be found on the [nuget page](https://www.nuget.org/packages/ByteDev.Json.SystemTextJson/).
## Release Notes
Releases follow semantic versioning.
Full details of the release notes can be viewed on [GitHub](https://github.com/ByteDev/ByteDev.Json.SystemTextJson/blob/master/docs/RELEASE-NOTES.md).
## Usage
All custom `JsonConverter` types are in namespace `ByteDev.Json.SystemTextJson.Serialization`.
---
### StringToDateTimeJsonConverter
Converter allows a JSON string representation of a date time to be automatically converted to a `DateTime` and back again using the supplied date time format string.
```csharp
public class TestEntity
{
[JsonPropertyName("datetime")]
public DateTime MyDateTime { get; set; }
}
```
```csharp
var converter = new StringToDateTimeJsonConverter("yyyy-MM-dd HH:mm:ss");
var options = new JsonSerializerOptions();
options.Converters.Add(converter);
string json = "{\"datetime\":\"2022-01-12 09:59:20\"}";
var obj = JsonSerializer.Deserialize(json, options);
var newJson = JsonSerializer.Serialize(obj, options);
// newJson == json
```
---
### UnixEpochTimeToDateTimeJsonConverter
Converter allows a JSON number representation of a Unix epoch time to be automatically converted to a `DateTime` and back again.
Both Unix epoch times as seconds or milliseconds are supported.
The converter assumes that the `DateTime` is UTC.
```csharp
public class TestEntity
{
[JsonPropertyName("datetime")]
public DateTime MyDateTime { get; set; }
}
```
```csharp
var converter = new UnixEpochTimeToDateTimeJsonConverter
{
Precision = UnixEpochTimePrecision.Seconds
};
var options = new JsonSerializerOptions();
options.Converters.Add(converter);
string json = "{\"datetime\":1641974376}";
var obj = JsonSerializer.Deserialize(json, options);
var newJson = JsonSerializer.Serialize(obj, options);
// newJson == json
```
---
### EnumJsonConverter
Converter allows a JSON number or string representation of an enum to be automatically converted to a specified `Enum`.
As well as supporting both enum value (number) and name (string) alias string names can also be specified through use of `JsonEnumStringValueAttribute`.
```csharp
public enum LightSwitch
{
On = 1,
[JsonEnumStringValue("switchOff")]
Off = 2,
Faulty = 3
}
public class MyHouse
{
[JsonPropertyName("lights")]
public LightSwitch BedroomLights { get; set; }
}
```
```csharp
var converter = new EnumJsonConverter
{
// false => Enum number value used
// true => Enum string name used
// (or JsonEnumStringValueAttribute value if defined)
WriteEnumName = true
};
var options = new JsonSerializerOptions();
options.Converters.Add(converter);
// Example JSON representations:
// - Using enum value => {"lights":1}
// - Using enum name => {"lights":"On"}
// - Using attribute name => {"lights":"switchOff"}
string json = "{\"lights\":\"switchOff\"}";
var obj = JsonSerializer.Deserialize(json, options);
var newJson = JsonSerializer.Serialize(obj, options);
// newJson == json
```
---
### NumberToBoolJsonConverter
Converter allows a JSON number (integer) to be automatically converted to a .NET `Boolean`.
```csharp
public class BoolEntity
{
[JsonPropertyName("myBool")]
public bool MyBool { get; set; }
}
```
```csharp
// Optional true/false integer representations params
var converter = new NumberToBoolJsonConverter();
var options = new JsonSerializerOptions();
options.Converters.Add(converter);
string json = "{\"myBool\":1}";
var obj = JsonSerializer.Deserialize(json, options);
// obj.MyBool == true
var newJson = JsonSerializer.Serialize(obj, options);
// newJson == json
```
---
### StringToBoolJsonConverter & StringToNullableBoolJsonConverter
Converter allows a JSON string to be automatically converted to a .NET `Boolean`.
```csharp
public class BoolEntity
{
[JsonPropertyName("myBool")]
public bool MyBool { get; set; }
}
```
```csharp
var converter = new StringToBoolJsonConverter("N", "Y");
var options = new JsonSerializerOptions();
options.Converters.Add(converter);
string json = "{\"myBool\":\"Y\"}";
var obj = JsonSerializer.Deserialize(json, options);
// obj.MyBool == true
var newJson = JsonSerializer.Serialize(obj, options);
// newJson == json
```
The package also contains the similar converter `StringToNullableBoolJsonConverter`.
This works in the same way to `StringToBoolJsonConverter` but converts to a .NET Nullable Boolean type.
The converter's constructor takes an additional third string parameter to represent the null value in JSON.
---
### StringToGuidJsonConverter
Converter allows a JSON string to be automatically converted to a .NET `System.Guid`.
Supports reading (deserializing) many different representations of Guid strings as well as specifying a write format to use when writing (serializing) to JSON.
```csharp
public class GuidEntity
{
[JsonPropertyName("myGuid")]
public Guid MyGuid { get; set; }
}
```
```csharp
var converter = new StringToGuidJsonConverter("N");
var options = new JsonSerializerOptions();
options.Converters.Add(converter);
string json = "{\"myGuid\":\"c62a82b35e0d47bf9a12b027ff56d3e3\"}";
var obj = JsonSerializer.Deserialize(json, options);
// obj.MyGuid == Guid.Parse("c62a82b3-5e0d-47bf-9a12-b027ff56d3e3")
var newJson = JsonSerializer.Serialize(obj, options) ;
// newJson == json
```
JSON string write formats currently supported:
```
"D" = "c62a82b3-5e0d-47bf-9a12-b027ff56d3e3"
"N" = "c62a82b35e0d47bf9a12b027ff56d3e3"
"B" = "{c62a82b3-5e0d-47bf-9a12-b027ff56d3e3}"
"P" = "(c62a82b3-5e0d-47bf-9a12-b027ff56d3e3)"
```