2015-05-08 2 views
-1

С без каких-либо изменений в код (я помню) formatter.Serialize не выполняется для по типу объекта
Он работает на 5 других типов испытания
Я не внес никаких изменений в этот класс (что я помню) - обозначен как Serializable Это довольно простой класс и не имеет почтения к системе. Windows. Документы.FlowDocumentИсключения не помеченные как сериализуемая

Как я могу устранить ошибку и исправить ее?

public static T DeepClone<T>(T obj) 
{ 
    using (var ms = new MemoryStream()) 
    { 
     var formatter = new BinaryFormatter(); 

     try 
     { 
      formatter.Serialize(ms, obj); 
     } 
     catch (Exception Ex) 
     { 
      Debug.WriteLine(Ex.Message); 
      Debug.WriteLine(Ex.Source); 

Первый шанс исключение типа 'System.Runtime.Serialization.SerializationException' произошло в mscorlib.dll

Дополнительная информация: Тип 'System.Windows.Documents.FlowDocument' в PresentationFramework Ассамблеи», версия = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'не помечено как сериализуемое.

InnerExeption является нулевым

У меня есть некоторые, что сузить и до вызова к свойству он работает
После вызова этого свойства он терпит неудачу
ThisUserGroups является свойством

try 
{ 
    User userclone = DeepClone<User>(CurUser); // success 
} 
catch (Exception Ex) 
{ 
    Debug.WriteLine("Before call to CurUser.ThisUserGroups.Count()"); 
    Debug.WriteLine(Ex.Message); 
} 
Debug.WriteLine("CurUser.ThisUserGroups.Count()" + " " + CurUser.ThisUserGroups.Count() + " " + CurUser.UserID); 
try 
{ 
    User userclone = DeepClone<User>(CurUser); //failure 
} 

Проблемный класс и имущество
Другие свойства и методы опущены
Группа является Serializable

[Serializable()] 
public class User : Object, INotifyPropertyChanged 
{ 
    [field: NonSerializedAttribute()] 
    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (PropertyChanged != null) PropertyChanged(this, e); 
    } 
    protected void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
    private HashSet<Group> thisUserGroups; 
    public HashSet<Group> ThisUserGroups 
    { // after a call to this deepclone fails 
     get 
     { 
      if (thisUserGroups == null) 
      { 
       thisUserGroups = new HashSet<Group>(); 
       foreach (Group g in groupsPlus) // static all groups in library 14 
       { 
        if (!thisUserGroups.Contains(g) && g.ID <= 0) 
         thisUserGroups.Add(g); 
       } 
       foreach (UserGroup userGroup in userGroups.OrderBy(x => x.Group.Name)) // docAdmin fail userGroups == 54 and thisUserGoups is 2 
       {                  // docAdminNotGroup success userGroups == 54 and thisUserGoups is 2 
        if (!thisUserGroups.Contains(userGroup.Group) && (IsInRoleDocAdmin || userGroup.UsrID == usrID)) 
         thisUserGroups.Add(userGroup.Group); 
       } 
      } 
      return thisUserGroups; // docAdmin fail thisUserGroups = 14 
     } 
    } 

    public User(Int16 UsrIDcon, string UserIDcon, string UserInitialsCon, string IPROuserIDcon, string IPROuserPWcon, Int16? FieldGroupID, 
       double WindowLeft, double WindowTop, double WindowHeight, double WindowWidth, bool WindowMaximized, 
       bool ViewIpro, bool ViewNative, enumSearchDetail? SearchDetail, string ExportPath) 
    { 
     usrID = UsrIDcon; 
     userID = UserIDcon; 
     userInitials = UserInitialsCon; 
     iPROuserID = IPROuserIDcon; 
     iPROuserPW = IPROuserPWcon; 
     fieldGroupID = FieldGroupID; 
     windowLeft = WindowLeft; 
     windowTop = WindowTop; 
     windowHeight = WindowHeight; 
     windowWidth = WindowWidth; 
     windowMaximixed = WindowMaximized; 
     viewIpro = ViewIpro; 
     viewNative = ViewNative; 
     searchDetail = SearchDetail; 
     if (!string.IsNullOrEmpty(ExportPath)) exportPath = ExportPath; 
     if (App.StaticGabeLib != null && App.StaticGabeLib.Search != null && searchDetail != null) 
     { 
      App.StaticGabeLib.Search.SearchDetail = (enumSearchDetail)searchDetail; 
     } 
     loginTime = DateTime.Now; 
    } 
} 
+0

Можете ли вы показать определение класса для тех, которые не сериализуются? –

+0

@ Andy_Vulhop Код образца и более подробная информация добавлена ​​ – Paparazzi

+0

Имеет ли 'Group' или один из его дочерних элементов свойство типа' System.Windows.Documents.FlowDocument'? –

ответ

0

Все, что я могу представить, это проблема с добавлением двух коллекций.

Я реорганизовал только группы groupsPlus (без userGroup.Group), и это сработало.

Но я не знаю, почему это заставило его работать.

Что еще более странно, так это то, что оно использовалось для добавления двух коллекций.

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