diff --git a/Pilz.Cryptography/Pilz.Cryptography.csproj b/Pilz.Cryptography/Pilz.Cryptography.csproj index eb71d4d..7afed73 100644 --- a/Pilz.Cryptography/Pilz.Cryptography.csproj +++ b/Pilz.Cryptography/Pilz.Cryptography.csproj @@ -51,6 +51,7 @@ + diff --git a/Pilz.Cryptography/SecureString.cs b/Pilz.Cryptography/SecureString.cs index 73d2b06..8b274b7 100644 --- a/Pilz.Cryptography/SecureString.cs +++ b/Pilz.Cryptography/SecureString.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; namespace Pilz.Cryptography { + [JsonConverter(typeof(Json.Converters.SecureStringJsonConverter))] public class SecureString { public static ICrypter DefaultCrypter { get; set; } diff --git a/Pilz.Cryptography/SecureStringJsonConverter.cs b/Pilz.Cryptography/SecureStringJsonConverter.cs new file mode 100644 index 0000000..8a1f1f0 --- /dev/null +++ b/Pilz.Cryptography/SecureStringJsonConverter.cs @@ -0,0 +1,40 @@ +using Newtonsoft.Json; +using Pilz.Cryptography; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pilz.Json.Converters +{ + public class SecureStringJsonConverter : JsonConverter + { + public override bool CanConvert(Type objectType) + { + return typeof(SecureString).IsAssignableFrom(objectType); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + var idString = serializer.Deserialize(reader); + SecureString id; + + if (existingValue is object) + id = (SecureString)existingValue; + else + id = new SecureString(); + + id.EncryptedValue = idString; + + return id; + } + + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + serializer.Serialize(writer, ((SecureString)value).EncryptedValue); + } + } +}