【发布时间】:2019-02-17 20:11:21
【问题描述】:
您好,我有一个在.Net Standard 程序集中定义的类。
现在我从我的.Net Core 项目中引用了该程序集。
当我尝试反序列化 .Net Core 中的类时,我的类字段是默认的。
默认情况下,我的意思是值类型获取所有内部值默认值,并且类字段为空。
在我的示例中,如果Val 是int,反序列化后它的值将是0,而如果它是class,它将为空。
.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);
}
请注意,我的类在构造函数中使用了一个参数。这可能是问题吗?如果我的参数构造函数确实是问题......你如何设法通过他的参数序列化一个需要在其构造函数中执行一些逻辑的对象?
【问题讨论】:
-
这段代码有几个无效和编译时间问题。例如,
DeserializeObject接受一个字符串。为了确保其他人可以复制您的问题,您可以从您的编辑器/IDE 中粘贴确切的内容吗?如果您需要更改某些内容以隐藏内容,请确保您的简化代码能够编译并复制问题。 -
你说我的类字段是默认的是什么意思?你的意思是
Assert(deser.Val == matr.Val);会失败,因为deser.Val(实际上是一个属性,而不是一个字段)在反序列化后为零?还是你的意思是别的?一个 minimal reproducible example 包括一个失败但应该成功的Assert语句将是理想的,并且最大限度地提高我们可以帮助您的机会。 -
对不起,这是一个错字。我编辑了我的帖子。
标签: .net-core json.net deserialization