ExtendedXmlSerializerを使用できます。暗号化が必要なプロパティを持つクラスがある場合:
public class Person
{
public string Name { get; set; }
public string Password { get; set; }
}
インターフェイス IPropertyEncryption を実装する必要があります。たとえば、Base64 エンコーディングが表示されますが、実際にはより安全なものを使用する方が適切です。RSA.:
public class Base64PropertyEncryption : IPropertyEncryption
{
public string Encrypt(string value)
{
return Convert.ToBase64String(Encoding.UTF8.GetBytes(value));
}
public string Decrypt(string value)
{
return Encoding.UTF8.GetString(Convert.FromBase64String(value));
}
}
Person クラスの構成では、暗号化するプロパティを指定する必要があります。
public class PersonConfig : ExtendedXmlSerializerConfig<Person>
{
public PersonConfig()
{
Encrypt(p => p.Password);
}
}
次に、PersonConfig クラスと IPropertyEncryption の実装を登録する必要があります。ドキュメントでは、Autofac を使用した構成について説明しています。簡単な構成があります:
var toolsFactory = new SimpleSerializationToolsFactory();
// Register your config class
toolsFactory.Configurations.Add(new PersonConfig());
// If you want to use property encryption you must register your implementation of IPropertyEncryption, e.g.:
toolsFactory.EncryptionAlgorithm = new Base64PropertyEncryption();
ExtendedXmlSerializer serializer = new ExtendedXmlSerializer(toolsFactory);
次に、オブジェクトをシリアル化できます。
var obj = new Person {Name = "John", Password = "Ab238ds2"};
var xml = serializer.Serialize(obj);
xml は次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<Person type="ExtendedXmlSerialization.Samples.Encrypt.Person">
<Name>John</Name>
<Password>QWIyMzhkczI=</Password>
</Person>
ExtendedXmlSerializer には他にも多くの便利な機能があります。
- 標準 XMLSerializer からの逆シリアル化 xml
- プロパティ インターフェイスを持つシリアル化クラス
- シリアライゼーションの循環参照と参照 ID
- 古いバージョンの xml の逆シリアル化
- プロパティの暗号化
- カスタムシリアライザ
ExtendedXmlSerializer は、.net 4.5 および .net Core をサポートします。WebApi および AspCore と統合できます。