C# sérialiser une classe sans constructeur sans paramètre
Je me suis mise en œuvre d'un modèle de fabrique pour 3 différentes classes de chiffrement. L'usine permettra de déterminer celui qui à créer et ensuite obtenir un sérialisé instance de la classe correcte à partir d'une base de données et de retour à la charge du demandeur.
Je suis en train de travailler sur la sérialisation des classes pour les stocker dans la base de données. Je suis en train d'écrire un pour un la cryptographie PGP classe appelée BouncyCastle
. Je peux créer la classe et les clés de fichiers, mais lorsque j'essaie de le sérialiser, il est dit que les deux variables membres, qui sont les objets de la classe PgpPublicKey
, et PgpPrivateKey
, ne peut pas être sérialisé, car ils n'ont pas sans paramètre constructeurs.
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();
}
La classe a deux variables membres qui sont le problème.
public class BouncyCastle : ICryptographyProvider
{
public PgpPublicKey m_publicKey;
public PgpPrivateKey m_privateKey;
public string m_passPhrase;
//cut out the irelevant parts
C'est la clé publique de la classe. Pas de constructeur sans paramètre.
public class PgpPublicKey
{
public PgpPublicKey(PublicKeyAlgorithmTag algorithm, AsymmetricKeyParameter pubKey, DateTime time);
//cut other methods
}
Pourquoi vous ne voulez pas de simplement ajouter sans paramètre constructeurs?
OriginalL'auteur Roger Bacon | 2013-03-04
Vous devez vous connecter pour publier un commentaire.
Tout Sérialiseur Classe besoin d'un constructeur sans paramètre, car, tandis que la désérialisation de créer un vide nouvelle instance, puis il copie tous les biens pris à partir de seialized de données.
Vous pouvez facilement faire le constructeur privé, si vous voulez éviter de créer sans paramètres.
EX:
OriginalL'auteur Jamby
Oui, le XmlSerializer nécessite un constructeur sans paramètre à exister pour la sérialisation de travail.
De la réponse suivante: Pourquoi XML-classe Sérialisable besoin d'un constructeur sans paramètre
OriginalL'auteur Magnum
DataContractSerializer ne nécessite pas de constructeur sans paramètre. Ce qu'il exige plutôt spéciales sont des attributs de la classe.
OriginalL'auteur alexkovelsky
Sont
PgpPublicKey
etPgpPrivateKey
classes définies par vous? Ajoutez simplement sans paramètre constructeurs.Ils peuvent être privés si vous ne voulez pas de les rendre accessibles de l'extérieur. Le deserializer pouvez toujours y accéder.
OriginalL'auteur Peter Ivan