如何 save/write 具有不同属性的任务

How to save/write Task with different attributes

我正在尝试构建一个更高级的 ToDoList-Console 程序。我正在学习序列化,但我似乎不明白如何:

我的目标是拥有 2 个方法:task1 和 task2。 Task1 是主要任务,task2 是任务的子任务,将在控制台中用 \t 可视化。 这是我目前的代码,它只是将任务保存为一个字符串,没有任何复杂性。

public class TodoItem
    {
        public string Description { get; set; }
        public DateTime? DueOn { get; set; }

        public override string ToString()
        {
            return $"{this.Description}";
        }
    }

    internal static class Program
    {
        static private readonly string _saveFileName = "todo.json";
        static void Main()
        {
            {
                // An example list containing 2 items
                List<TodoItem> items = new List<TodoItem> {
                new TodoItem { Description = "Feed the dog" },
                new TodoItem { Description = "Buy groceries" /*, DueOn = new DateTime(2021, 9, 30, 16, 0, 0)*/ }
            };
                // Serialize it to JSON
                string json = JsonSerializer.Serialize(items, new JsonSerializerOptions() { WriteIndented = true });

                // Save it to a file
                File.WriteAllText(_saveFileName, json);
            }

            // Loading list
            {
                string json = File.ReadAllText(_saveFileName);

                List<TodoItem> items = JsonSerializer.Deserialize<List<TodoItem>>(json);

                // Loading items
                foreach (var todo in items)
                    Console.WriteLine(todo);
            }

        }```

您可以使用 inheritance 来执行两种类型的任务。

您的其余目标似乎已经奏效:)

这是一个例子:

public abstract class TaskBase
{
    public string Description { get; set; }
    
    public DateTime? DueOn { get; set; }

    public override string ToString()
    {
        return $"{Description}";
    }
}

public class MainTask : TaskBase
{
    public SubTask? SubTask { get; set; }

    public override string ToString()
    {
        if (SubTask is not null)
        {
            return $"{Description}{Environment.NewLine}\t{SubTask}";
        }
        else
        {
            return base.ToString();
        }
    }
}

public class SubTask : TaskBase {}

static class Program
{
    private const string _saveFileName = "todo.json";

    static void Main()
    {
        {
            // An example list containing 2 items
            List<MainTask> items = new List<MainTask> 
            {
                new MainTask { Description = "Feed the dog" },
                new MainTask { Description = "Buy groceries", SubTask = new SubTask { Description = "Food" } }
            };

            // Serialize it to JSON
            string json = JsonSerializer.Serialize(items, new JsonSerializerOptions() { WriteIndented = true });

            // Save it to a file
            File.WriteAllText(_saveFileName, json);
        }

        // Loading list
        {
            string json = File.ReadAllText(_saveFileName);

            List<MainTask> items = JsonSerializer.Deserialize<List<MainTask>>(json);

            // Loading items
            foreach (var todo in items)
                Console.WriteLine(todo);
        }

    }
}