2015-12-01 4 views
0

Я пытаюсь сериализовать класс System.Exception библиотеки классов .Net, однако, как многие участники обсудили здесь, возникает проблема с свойством Data класса потому что он реализует интерфейс IDictionary, что делает его не сериализуемым.Сериализация класса System.Exception, игнорируя сериализацию свойств данных

Я пытаюсь переопределить и пометить это свойство, которое будет игнорироваться во время сериализации, чтобы решить проблему, но без успеха я все равно получаю ту же ошибку.

public class CustomException : Exception 
{ 
    [IgnoreDataMemberAttribute] 
    public override IDictionary Data 
    { 
     get 
     { 
      return base.Data; 
     } 
    } 
} 

Я также пробовал использовать атрибут IgnoreXML с теми же результатами, я использую класс XMLSerializer.

ответ

0

Для Serialalize IDictionary. Попробуйте следующее:

[DataContract] 
[Serializable] 
public class CustomException : Exception 
{ 

    IDictionary _iDictionary; 

    [DataMember] 
    public override IDictionary Data 
    { 
     get 
     { 
      if (_iDictionary == null) 
      { 
       _iDictionary = base.Data; 
      } 
      return _iDictionary; 
     } 
    } 
} 
+0

К сожалению, он дал то же исключение, говоря, что он не может сериализовать IDictionary. – Sisyphus

+0

Я обновил этот пример, добавил элементы в данные и написал их в файл, используя поток файлов. Я думаю, это то, что вы хотите. – Kentonbmax

+0

все еще такая же проблема, фактически маркируя свойство Data как DataMember, сообщите сериализатору о его сериализации, чего мы хотим избежать. – Sisyphus

Смежные вопросы