[Serializeable]
недопустимо в полях / свойствах и должно быть указано только в классе. Ваш класс должен быть сериализуемым просто так:
[Serializable()]
public class t_Task
{
private string nom;
private string description;
List<t_Task> subTask; // Removed the [Serializeable] attribute
}
Важно отметить, что ваш List<t_Task>
не является вложенным классом (это просто обычное поле класса), поэтому ссылка, на которую вы ссылаетесь, на самом деле не связана с вашей проблемой.
[Serializable]
- относительно старый метод маркировки для сериализации. Я хотел бы сослаться на документацию Microsoft на SerializeableAttribute
, чтобы увидеть, как может работать ваш код.
Вот пример, основанный на статье Microsoft, которую я связал:
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace ConsoleOne
{
[Serializable()]
public class t_Task
{
private string nom = "test"; // Added for test data.
private string description = "desc"; // Added for test data
List<t_Task> subTask = new List<t_Task>();
public void AddTask()
{
this.subTask.Add(new t_Task());
}
public override string ToString()
=> $"{nom}-{description}-{subTask?.Count}";
}
class Program
{
static void Main(string[] args)
{
var task = new t_Task()
{
};
task.AddTask();
task.AddTask();
// Opens a file and serializes the object into it in binary format.
Stream stream = File.Open("data.xml", FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, task);
stream.Close();
//Empties obj.
task = null;
//Opens file "data.xml" and deserializes the object from it.
stream = File.Open("data.xml", FileMode.Open);
formatter = new BinaryFormatter();
//formatter = new BinaryFormatter();
task = (t_Task)formatter.Deserialize(stream);
stream.Close();
Console.WriteLine($"{task}");
Console.ReadLine();
}
}
}
Примечание: в .NET есть много других способов сериализации, которые немного более современны. Возможно, стоит прочитать об этом. Однако, если вас интересует только простой двоичный формат, приведенной выше информации должно быть достаточно.