сериализация свойства RSAKeyValue в классе Serializable - PullRequest
0 голосов
/ 20 июля 2010

В моем проекте на C # есть класс, помеченный атрибутом [Serializable].У него есть свойство типа RSAKeyValue:

[XmlElement(PUBLIC_KEY_TAG_NAME)]
public RSAKeyValue Key { get; private set; }

Когда я пытаюсь сериализовать экземпляр моего класса в XML, а затем десериализовать этот XML обратно в экземпляр моего класса,Я получаю:

System.InvalidOperationException: System.Security.Cryptography.KeySizes не может быть сериализовано, поскольку у него нет конструктора без параметров.

Это происходит, когда я вызываю XmlSerializer.Serialize.Я уверен, что это из-за свойства RSAKeyValue в моем классе, так как все остальные свойства, которые сериализуются, являются простыми строками.Что я могу сделать по этому поводу?Должен ли я создать свой собственный класс-оболочку для экземпляра RSAKeyValue, который правильно сериализует / десериализует?

Вот несколько примеров XML, которые можно десериализовать в экземпляр RSAKeyValue:

<RSAKeyValue>
  <Modulus>long string here...</Modulus>
  <Exponent>short string here</Exponent>
</RSAKeyValue>

1 Ответ

1 голос
/ 20 июля 2010

Прежде всего, XML Serializer игнорирует атрибут [Serializable].

Во-вторых, если у класса нет конструктора по умолчанию, его невозможно сериализовать с помощью XML-сериализатора, точка.

Чего ты пытаешься достичь? Возможно, вы можете сделать то же самое, используя сериализатор контрактов данных?


Создайте класс, который содержит только модуль и экспоненту. Заполните этот класс из RSAKeyValue. Сериализуйте свой пользовательский класс. После десериализации используйте его для создания нового RSAKeyValue.

...