Rog*_*con 12 c# serialization bouncycastle
我正在为3种不同的加密类实现工厂模式.工厂将确定要创建哪一个,然后从数据库中获取正确类的序列化实例并将其返回给请求者.现在我正在编写类以将它们存储在数据库中.我正在写一个名为PGP加密类的BouncyCastle.我可以从文件创建类和键,但是当我尝试序列化它时,它表示两个成员变量,它们是类的对象PgpPublicKey,并且PgpPrivateKey由于它们没有无参数构造函数而无法序列化.
public void createdBouncyFromFiles()
{
var bc = new BouncyCastle("C:\\TestFiles\\BouncyPublicKey.txt", "C:\\TestFiles\\BouncyPrivateKey.txt", "Password1");
var xmlSerializer = new XmlSerializer(bc.GetType());
var textWriter = new StringWriter();
xmlSerializer.Serialize(textWriter, bc);
var theSerializedClass = textWriter.ToString();
}
Run Code Online (Sandbox Code Playgroud)
该类有两个成员变量是问题.
public class BouncyCastle : ICryptographyProvider
{
public PgpPublicKey m_publicKey;
public PgpPrivateKey m_privateKey;
public string m_passPhrase;
// cut out the irelevant parts
Run Code Online (Sandbox Code Playgroud)
这是公钥类.没有无参数的构造函数.
public class PgpPublicKey
{
public PgpPublicKey(PublicKeyAlgorithmTag algorithm, AsymmetricKeyParameter pubKey, DateTime time);
// cut other methods
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*mby 30
任何Serializer类都需要一个无参数构造函数,因为在反序列化它时创建一个空的新实例,然后它复制从seialized数据中获取的每个公共属性.
如果要避免在没有参数的情况下创建构造函数,可以轻松地将构造函数设置为私有.
EX:
public class PgpPublicKey
{
public PgpPublicKey(PublicKeyAlgorithmTag algorithm, AsymmetricKeyParameter pubKey, DateTime time);
private PgpPublicKey();
// cut other methods
}
Run Code Online (Sandbox Code Playgroud)
是的,XmlSerializer 需要一个无参数的构造函数才能使序列化工作。
来自以下答案:为什么XML-Serializable类需要无参数构造函数
在对象的反序列化过程中,负责对对象进行反序列化的类将创建序列化类的实例,然后仅在获取要填充的实例之后,再填充序列化的字段和属性。
您可以根据需要将构造函数设为私有或内部,只要它没有参数即可。
| 归档时间: |
|
| 查看次数: |
27166 次 |
| 最近记录: |