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

时间:2019-02-16 20:35:48

标签: .net-core json.net deserialization

您好,我有一个在.Net Standard程序集中定义的类。 现在,我从我的.Net Core项目中引用了该程序集。

当我尝试反序列化.Net Core中的班级时,我的班级字段是默认的。

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

.NET Standard

public  class Matrix
{
    public int Val { get; set; }


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

.NET Core

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

}

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

1 个答案:

答案 0 :(得分:1)

您提供的代码效果很好。在deser.Val中反序列化之后,您将看到3。但是,如果您更改public int Val { get; private set; }public int Val { get; },则将具有默认值。对于引用类型,取决于值的类型将为NULL。

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