С без каких-либо изменений в код (я помню) 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;
}
}
Можете ли вы показать определение класса для тех, которые не сериализуются? –
@ Andy_Vulhop Код образца и более подробная информация добавлена – Paparazzi
Имеет ли 'Group' или один из его дочерних элементов свойство типа' System.Windows.Documents.FlowDocument'? –