代码之家  ›  专栏  ›  技术社区  ›  Bercovici Adrian

为什么类字段在反序列化时被默认?

  •  0
  • Bercovici Adrian  · 技术社区  · 7 年前

    您好,我有一个在 .Net Standard 装配 现在,我从我的 .Net Core 项目

    当我试图反序列化我的 .Net核心 我的类字段是默认值。

    默认情况下,我的意思是值类型获取所有内部值,并且类字段为空。 在我的例子中,如果 Val 是一个 int 它会有它的价值 0 在反序列化之后,它会是一个 class 它将是空的。

    .NET标准

    public  class Matrix
    {
        public int Val { get; set; }
    
    
        public Matrix(int set) //value is default
        {
            this.Val = set;
        }
    }
    

    .NET核心

    static void Main(string[] args)
    {
    
        Matrix matr = new Matrix(3);
    
    
        var str=JsonConvert.SerializeObject(matr);
        var bytes=Encoding.Utf8.GetBytes(str);
    
    
        var str = Encoding.UTF8.GetString(bytes); //string looks ok !
    
    
        var deser = JsonConvert.DeserializeObject<Matrix>(str);
    
    }
    

    请注意,我的类在构造函数中使用了一个参数。这可能是问题所在吗?如果我的参数构造函数真的是个问题。。。如何通过参数序列化需要在构造函数中执行某些逻辑的对象?

    0 回复  |  直到 7 年前
        1
  •  1
  •   Nick Sinitsin    7 年前

    你提供的代码运行良好。在 deser.Val 你会看到3。但如果你愿意改变 public int Val { get; private set; } public int Val { get; } 您将有一个默认值。对于引用类型,它所依赖的值类型将为NULL。

    也许你可以提供更多信息和问题截图?