您可以使用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 集成。