using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace BuildingBlocks.EventStoreDB.Serialization;
public static class SerializationExtensions
{
public static JsonSerializerSettings WithDefaults(this JsonSerializerSettings settings)
{
settings.WithNonDefaultConstructorContractResolver()
.Converters.Add(new StringEnumConverter());
return settings;
}
public static JsonSerializerSettings WithNonDefaultConstructorContractResolver(this JsonSerializerSettings settings)
{
settings.ContractResolver = new NonDefaultConstructorContractResolver();
return settings;
}
///
/// Deserialize object from json with JsonNet
///
/// Type of the deserialized object
/// json string
/// deserialized object
public static T FromJson(this string json)
{
return JsonConvert.DeserializeObject(json,
new JsonSerializerSettings().WithNonDefaultConstructorContractResolver())!;
}
///
/// Deserialize object from json with JsonNet
///
/// Type of the deserialized object
/// json string
/// object type
/// deserialized object
public static object FromJson(this string json, Type type)
{
return JsonConvert.DeserializeObject(json, type,
new JsonSerializerSettings().WithNonDefaultConstructorContractResolver())!;
}
///
/// Serialize object to json with JsonNet
///
/// object to serialize
/// json string
public static string ToJson(this object obj)
{
return JsonConvert.SerializeObject(obj);
}
///
/// Serialize object to json with JsonNet
///
/// object to serialize
/// json string
public static StringContent ToJsonStringContent(this object obj)
{
return new StringContent(obj.ToJson(), Encoding.UTF8, "application/json");
}
}