2019-12-18 21:56:41 +00:00
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Text.Json;
|
|
|
|
|
using System.Text.Json.Serialization;
|
|
|
|
|
using Dapper;
|
2013-03-26 05:51:56 +00:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Datastore.Converters
|
|
|
|
|
{
|
2019-12-18 21:56:41 +00:00
|
|
|
|
public class EmbeddedDocumentConverter<T> : SqlMapper.TypeHandler<T>
|
2013-09-21 06:38:27 +00:00
|
|
|
|
{
|
2019-12-18 21:56:41 +00:00
|
|
|
|
protected readonly JsonSerializerOptions SerializerSettings;
|
2014-01-29 00:53:59 +00:00
|
|
|
|
|
2019-12-18 21:56:41 +00:00
|
|
|
|
public EmbeddedDocumentConverter()
|
2014-01-29 00:53:59 +00:00
|
|
|
|
{
|
2019-12-18 21:56:41 +00:00
|
|
|
|
var serializerSettings = new JsonSerializerOptions
|
2014-01-29 00:53:59 +00:00
|
|
|
|
{
|
2019-12-18 21:56:41 +00:00
|
|
|
|
AllowTrailingCommas = true,
|
2020-01-22 21:47:33 +00:00
|
|
|
|
IgnoreNullValues = true,
|
2019-12-18 21:56:41 +00:00
|
|
|
|
PropertyNameCaseInsensitive = true,
|
|
|
|
|
DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
|
|
|
|
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
|
|
|
|
WriteIndented = true
|
2014-01-29 00:53:59 +00:00
|
|
|
|
};
|
|
|
|
|
|
2019-12-18 21:56:41 +00:00
|
|
|
|
serializerSettings.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, true));
|
|
|
|
|
serializerSettings.Converters.Add(new TimeSpanConverter());
|
|
|
|
|
serializerSettings.Converters.Add(new UtcConverter());
|
2014-01-29 04:13:00 +00:00
|
|
|
|
|
2019-12-18 21:56:41 +00:00
|
|
|
|
SerializerSettings = serializerSettings;
|
2014-01-29 00:53:59 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-12-18 21:56:41 +00:00
|
|
|
|
public EmbeddedDocumentConverter(params JsonConverter[] converters)
|
|
|
|
|
: this()
|
2013-03-26 05:51:56 +00:00
|
|
|
|
{
|
2019-12-18 21:56:41 +00:00
|
|
|
|
foreach (var converter in converters)
|
2013-03-26 05:51:56 +00:00
|
|
|
|
{
|
2019-12-18 21:56:41 +00:00
|
|
|
|
SerializerSettings.Converters.Add(converter);
|
2013-03-26 05:51:56 +00:00
|
|
|
|
}
|
2013-09-21 06:38:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-12-18 21:56:41 +00:00
|
|
|
|
public override void SetValue(IDbDataParameter parameter, T value)
|
2013-09-21 06:38:27 +00:00
|
|
|
|
{
|
2019-12-18 21:56:41 +00:00
|
|
|
|
parameter.Value = JsonSerializer.Serialize(value, SerializerSettings);
|
2013-03-26 05:51:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-12-18 21:56:41 +00:00
|
|
|
|
public override T Parse(object value)
|
2013-03-26 05:51:56 +00:00
|
|
|
|
{
|
2019-12-18 21:56:41 +00:00
|
|
|
|
return JsonSerializer.Deserialize<T>((string)value, SerializerSettings);
|
2013-03-26 05:51:56 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2019-12-22 21:24:10 +00:00
|
|
|
|
}
|