System.Text.Json 没有序列化列表<T>
System.Text.Json not serialising List<T>
我只是.Net 5.
我正在使用 Blazor 创建一个 QC 应用程序,我正在使用 System.Text.Json
序列化一个包装器对象,该对象的 属性 为 List<T>
,这是 QC 问题的答案 post发送到服务器并保存在数据库中。
然而,列表中的每个项目都没有被序列化,所以 posted 请求有一个空列表。
所以在我的代码中,我只是对一个对象进行了非常简单的序列化:
string content = JsonSerializer.Serialize(obj);
如果我调试然后我可以看到 Answers
数组有正确的长度,但每一项都是空的:
'{"Answers":[{},{},{},{}],...}'
但是,C# 对象绝对具有正确输入值的属性。
T
是一个答案对象,它只是一个没有注释的POCO:
public class ReturnedQCResult
{
public string Question;
public int QuestionEntryTypeID;
public char QuestionType;
public short QuestionSequence;
public string Text;
public decimal? Number;
public bool? YesNo;
public DateTime? DateEntry;
public TimeSpan? TimeEntry;
public long QuestionID;
}
有没有人知道为什么会发生这种情况,或者是否有要打开的设置?
非常感谢。
虽然以前版本的 System.Text.Json 只能序列化 public 属性,但从 .NET 5 开始,您现在可以明确告诉 System.Text.Json 在序列化中包含字段:https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0#include-fields
var options = new JsonSerializerOptions()
{
IncludeFields = true,
};
string content = JsonSerializer.Serialize(obj, options);
我只是.Net 5.
我正在使用 Blazor 创建一个 QC 应用程序,我正在使用 System.Text.Json
序列化一个包装器对象,该对象的 属性 为 List<T>
,这是 QC 问题的答案 post发送到服务器并保存在数据库中。
然而,列表中的每个项目都没有被序列化,所以 posted 请求有一个空列表。
所以在我的代码中,我只是对一个对象进行了非常简单的序列化:
string content = JsonSerializer.Serialize(obj);
如果我调试然后我可以看到 Answers
数组有正确的长度,但每一项都是空的:
'{"Answers":[{},{},{},{}],...}'
但是,C# 对象绝对具有正确输入值的属性。
T
是一个答案对象,它只是一个没有注释的POCO:
public class ReturnedQCResult
{
public string Question;
public int QuestionEntryTypeID;
public char QuestionType;
public short QuestionSequence;
public string Text;
public decimal? Number;
public bool? YesNo;
public DateTime? DateEntry;
public TimeSpan? TimeEntry;
public long QuestionID;
}
有没有人知道为什么会发生这种情况,或者是否有要打开的设置?
非常感谢。
虽然以前版本的 System.Text.Json 只能序列化 public 属性,但从 .NET 5 开始,您现在可以明确告诉 System.Text.Json 在序列化中包含字段:https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0#include-fields
var options = new JsonSerializerOptions()
{
IncludeFields = true,
};
string content = JsonSerializer.Serialize(obj, options);