Резюме
Мне дали краткое описание создания программного решения с постоянством.Тем не менее, я обнаружил ошибки в моей сериализации, которые не имеют смысла, так как объект, который я пытаюсь десериализовать, имеет содержимое и не является пустым.Я потратил около 3 часов на разные версии, а также информацию из Интернета, но безуспешно.Извините за большие куски кода, но я не могу найти, где он терпит неудачу.
Ресурсы
Проблема BinaryFormatter & CryptoStream при десериализации
Попытка десериализации пустого потока?
Ошибка времени выполнения Попытка десериализации пустого потока
Документация Microsoft - ISerializable
SerializableAttribute
Код
Десериализация
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\')[1];
string folderName = "c:\\Users\\"+ userName + "\\Documents";
string pathString = System.IO.Path.Combine(folderName, "Clients");
System.IO.Directory.CreateDirectory(pathString);
string[] FileNames = Directory.GetFiles("C:\\Users\\" + userName + "\\Documents\\Clients\\", "*.clnt")
.Select(System.IO.Path.GetFileName)
.ToArray();
if (FileNames.Length > 0)
{
for (int Count = 0; Count <= FileNames.Length; ++Count)
{
FileStream s = new FileStream(FileNames[Count] + ".clnt", FileMode.Open, FileAccess.Read);
IFormatter formatter = new BinaryFormatter();
ClientDataClass Client = (ClientDataClass)formatter.Deserialize(s);
s.Close();
ClientComboChoice.Items.Add(Client);
}
}
}
Сериализация
protected ClientDataClass(SerializationInfo info, StreamingContext context )
{
StClientBrief = info.GetString(StClientBrief);
StClientName = info.GetString(StClientName);
StClientEmail = info.GetString(StClientEmail);
StartDate = info.GetDateTime(StartDate.ToString());
DueDate = info.GetDateTime(DueDate.ToString());
Price = info.GetDouble(Price.ToString());
SFW = info.GetBoolean(SFW.ToString());
Planning = info.GetBoolean(Planning.ToString());
PlanName = info.GetString(PlanName);
}
//[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)] Learnt this is obsolete 25/02/2019
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("ClientName", StClientName);
info.AddValue("ClientBrief", StClientBrief);
info.AddValue("ClientEmail", StClientEmail);
info.AddValue("StartDate", StartDate);
info.AddValue("DueDate", DueDate);
info.AddValue("Price", Price);
info.AddValue("SFW", SFW);
info.AddValue("Planning", Planning);
info.AddValue("Plan Name", PlanName);
}
}
Файл подтверждения содержит:
![Proof it has contents](https://i.stack.imgur.com/Nf2Ft.jpg)
![Proof it exists](https://i.stack.imgur.com/ZflFN.jpg)
Попытки
Я пытался изменитьрасширение (соответствует файлу).Я пытался удалить расширение.Я пытался изменить часть сериализации класса данных.
Вопрос
Что не так?Как мне избежать этого в будущем?Как мне это исправить?