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"); } }