美文网首页
C# 反序列化需要一个空构造函数

C# 反序列化需要一个空构造函数

作者: 飞天猪Pony | 来源:发表于2020-10-19 11:13 被阅读0次
    var user = JsonSerializer.Deserialize<UserModel>(jsonStr, new JsonSerializerOptions()
                    {
                        PropertyNameCaseInsensitive = true
                    });
    
    public class UserModel
        {
            public UserModel()
            {
    
            }
            public UserModel(string email, string gid)
            {
                Email = email;
                Gid = gid;
            }
    
            public string Email { get; set; }
            public string Gid { get; set; }
        }
    

    1.用类创建对象时使用构造函数。构造函数名必须与类名相匹配并且必须没有返回类型。它们可以被重载,但是不被子类继承。

    调用构造函数

    2.只能从其他构造函数中调用构造函数。要调用同一个类中的构造函数,用匹配的参数调用 this() 函数。
    要调用超类中的构造函数,用匹配的参数调用 super() 函数。
    创建子类对象时,按层次结构中从上到下的顺序调用所有超类的构造函数。

    3.默认构造函数

    如果没有在类中提供任何其他构造函数,编译器将创建默认构造函数。它没有任何参数。
    默认构造函数调用超类的无参数构造函数。它与类有同样的访问修饰符。

    不过,哪怕在类中编写了一个构造函数,编译器就不会提供默认构造函数。
    例如,下面的类具有一个定义了两个参数的构造函数。这里如果我们试图不传递参数就实例化这个类,
    那么编译器将给出错误,因为没有默认构造函数

    class Dog
    
    {
    
        int x, y;
    
        Dog(int x, int y)
    
        {
    
          this.x = x;
    
          this.y = y;
    
        }
    }
    

    4.如果调用类的默认构造函数,而超类没有不带参数的构造函数,那么您的代码将不能编译。
    原因是子类的默认构造函数隐式地调用其超类的无参数构造函数。例如:

    class Dog
    {
    
        int x, y;
    
        Dog(int x, int y)
    
        {
    
          this.x = x;
    
          this.y = y;
    
        }
    
    }
    
    class MyDog extends Dog { }
    
    class Test
    
    {
    
        public static void main(String args[])
    
        {
    
          MyDog dog=new MyDog();
    
        }
    
    } 
    

    一般情况下是可以不写,系统有一个默认的构造方法,但是如果你自己加了一个构造方法,
    那么默认的就失效了,需要自己加进去,就算没写代码也要加

    相关文章

      网友评论

          本文标题:C# 反序列化需要一个空构造函数

          本文链接:https://www.haomeiwen.com/subject/nydkmktx.html