title: C# serialize a class without a parameterless constructor
body: <p>I'm implementing a factory pattern for 3 different cryptography classes. The factory will determine which one to create and then get a serialized instance of the correct class from a database and return it to the requester.
  Right now I'm working on serializing the classes to store them in the database. I'm writing one for a PGP cryptography class called <code>BouncyCastle</code>. I can create the class and the keys from files but when I try to serialize it, it says that the two member variables, which are objects of class <code>PgpPublicKey</code>, and <code>PgpPrivateKey</code>, cannot be serialized because they do not have parameterless constructors.</p>
  
  <pre><code>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();
  }
  </code></pre>
  
  <p>The class has two member variables that are the problem.</p>
  
  <pre><code>public class BouncyCastle : ICryptographyProvider
  {
  
      public PgpPublicKey m_publicKey;
      public PgpPrivateKey m_privateKey;
      public string m_passPhrase;
      // cut out the irelevant parts
  </code></pre>
  
  <p>This is the public key class. No parameterless constructor.</p>
  
  <pre><code>public class PgpPublicKey
  {
      public PgpPublicKey(PublicKeyAlgorithmTag algorithm, AsymmetricKeyParameter pubKey, DateTime time);
      // cut other methods
  }
  </code></pre>