私は3つの異なる暗号クラスのファクトリパターンを実装しています。ファクトリは、どちらを作成するかを決定し、データベースから正しいクラスのシリアル化されたインスタンスを取得し、リクエスタに返します。 今、私はデータベースにクラスを格納するためにクラスをシリアル化する作業をしています。私はBouncyCastle
と呼ばれるPGP暗号化クラスのためのものを書いています。クラスとキーをファイルから作成できますが、直列化しようとすると、パラメータがないコンストラクタがないため、クラスPgpPublicKey
およびPgpPrivateKey
のオブジェクトである2つのメンバ変数を直列化できません。C#パラメータのないコンストラクタなしでクラスをシリアライズ
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();
}
クラスには2つのメンバー変数があります。
public class BouncyCastle : ICryptographyProvider
{
public PgpPublicKey m_publicKey;
public PgpPrivateKey m_privateKey;
public string m_passPhrase;
// cut out the irelevant parts
これは公開鍵クラスです。パラメータのないコンストラクタはありません。
public class PgpPublicKey
{
public PgpPublicKey(PublicKeyAlgorithmTag algorithm, AsymmetricKeyParameter pubKey, DateTime time);
// cut other methods
}
シリアル化し、必要に応じて値をコピーする独自のデータクラスを作成します –
なぜパラメータのないコンストラクタを追加したくないのですか? – Restuta