小编Ste*_*dis的帖子

重写 ToString() 在抽象类中不起作用(.net-core 3.1)

将对象插入字符串时(主要用于日志记录目的),需要显式序列化,否则您将得到:

<ProjectName>.<Class>
Run Code Online (Sandbox Code Playgroud)

或者就我而言

ConsoleApp1.Program+Person
Run Code Online (Sandbox Code Playgroud)

所以我制作了一个非常简单的控制台应用程序作为 PoC 来解决这个问题。

在此 PoC 中,我有一个抽象基类,它仅使用 重写 ToString 方法JsonSerializer,因此我不需要每次想要记录/ConsoleWrite 我的对象时都进行序列化。

    public abstract class BaseModel
    {
        public override string ToString()
        {
            return JsonSerializer.Serialize(this);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这个抽象类应该被我的所有模型继承。这是整个控制台应用程序

        static async Task Main(string[] args)
        {
            var a = new Person() { Name = "John", Lastname = "Doe" };
            Console.WriteLine($"Hi, {a}.");
            Console.ReadKey();
        }

        public class Person : BaseModel
        {
            public string Name { get; set; }
            public string Lastname { get; set; }
        }
Run Code Online (Sandbox Code Playgroud)

运行 ConsoleWrites 上面的代码

Hi, {}. …
Run Code Online (Sandbox Code Playgroud)

c# serialization .net-core asp.net-core system.text.json

4
推荐指数
1
解决办法
908
查看次数