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

.net core 为什么类字段在反序列化时被默认?,.net-core,json.net,deserialization,.net Core,Json.net,Deserialization,您好,我有一个在.Net标准程序集中定义的类。 现在,我从.netcore项目中获得了对该程序集的引用 当我尝试在我的.Net Core中反序列化类时,我的类字段是默认值 默认情况下,我的意思是值类型获取所有内部值,并且类字段为空。 在我的示例中,如果Val是int,则反序列化后它的值将为0,而如果它是类,则它将为null .NET标准类 public class Matrix { public int Val { get; set; } public Matrix(int

您好,我有一个在
.Net标准
程序集中定义的类。 现在,我从
.netcore
项目中获得了对该程序集的引用

当我尝试在我的
.Net Core
中反序列化类时,我的类字段是默认值

默认情况下,我的意思是值类型获取所有内部值,并且类字段为空。 在我的示例中,如果
Val
int
,则反序列化后它的值将为
0
,而如果它是
,则它将为null

.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);

}
static void Main(字符串[]args)
{
矩阵matr=新矩阵(3);
var str=JsonConvert.SerializeObject(matr);
var bytes=Encoding.Utf8.GetBytes(str);
var str=Encoding.UTF8.GetString(字节);//字符串看起来正常!
var deser=JsonConvert.DeserializeObject(str);
}

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

您提供的代码效果良好。在
deser.Val
中反序列化后,您将看到3。但是如果您将更改
public int Val{get;private set;}
public int Val{get;}
您将有一个默认值。对于引用类型,它所依赖的值类型将为NULL


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

此代码有几个无效和编译时间问题。例如,
反序列化对象
接受字符串。为了确保其他人可以复制您的问题,您可以从编辑器/IDE粘贴确切的内容吗?如果您需要更改某些内容以隐藏内容,请确保您的简化代码编译并复制了该问题。当您说“我的类字段为默认值”时,您的确切意思是什么?你的意思是
Assert(desr.Val==matr.Val)
将失败,因为反序列化后
deser.Val
(实际上是一个属性,而不是字段)为零?或者你是说别的什么?包含一个失败但应该成功的
Assert
语句将是理想的,并最大限度地利用我们可以帮助您的机会。但可能相关:很抱歉,这是一个打字错误。我编辑了我的帖子。