System.Text.Json不能序列化List<T>。

6

我就是 .Net 5。

我正在使用Blazor创建一个QC应用程序,我正在使用System.Text.Json将一个包装对象序列化,该对象具有List<T>属性,这些属性是提交到服务器并保存在数据库中的QC问题答案。
然而,列表中的每个项目都未被序列化,因此提交的请求具有空列表。

所以在我的代码中,我只是对一个非常简单的对象进行了序列化:

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

有人知道为什么会发生这种情况吗?或者是否有某个设置可以开启?

非常感谢。


4
序列化程序会将属性进行序列化。 - Ralf
5
我会尽力进行翻译: “然而,C#对象确实具有正确输入值的属性。” 我不同意。该类并没有包含属性,那些是公共字段。 - Trevor
1
https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0#include-fields - Crowcoder
谢谢,我应该注意到那个! - Luke T O'Brien
1
在.NET 5中,这不应被标记为重复项(我正在投票重新打开这个问题)。从.NET 5开始,可以标记一个设置以允许字段的序列化。https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0#include-fields - David L
1个回答

9

1
最后,.NET 5 支持字段。 - Alois Kraus
@AloisKraus 以及序列化器中的显著性能提升。 - David L
是的,我有一个基准测试套件在这里:https://github.com/Alois-xx/SerializerTests/blob/master/Serializers/SystemTextJson.cs - Alois Kraus
虽然这样可以工作,但更好的解决方案是将 { get; set; } 添加到所有这些字段中,使它们成为属性。 - H H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接