Adds support for logging System.Text.Json dynamic types as structured data with Serilog. For JSON.NET dynamic types see this repo.
Install from NuGet:
Install-Package Destructurama.SystemTextJson
Modify logger configuration:
var log = new LoggerConfiguration().Destructure.SystemTextJsonTypes()
Now any System.Text.Json dynamic object can be represented in the log event's properties:
using System.Text.Json;
using Destructurama;
using Serilog;
var logger1 = new LoggerConfiguration().WriteTo.Console().CreateLogger();
var logger2 = new LoggerConfiguration().Destructure.SystemTextJsonTypes().WriteTo.Console().CreateLogger();
var json = """
{
"name": "Tom",
"age": 42,
"isDeveloper": true
}
""";
var obj = JsonSerializer.Deserialize<dynamic>(json);
logger1.Information("Deserialized without SystemTextJsonTypes(): {@Obj}", obj);
logger2.Information("Deserialized with SystemTextJsonTypes(): {@Obj}", obj);
Console.ReadKey();
Output:
[21:15:52 INF] Deserialized without SystemTextJsonTypes(): {"ValueKind": "Object", "$type": "JsonElement"}
[21:15:53 INF] Deserialized with SystemTextJsonTypes(): {"name": "Tom", "age": 42, "isDeveloper": true}
The results are available here.