【问题标题】:System.Text.Json not serialising List<T>System.Text.Json 不序列化 List<T>
【发布时间】:2021-03-12 15:21:33
【问题描述】:

我只是 .Net 5。

我正在使用 Blazor 创建一个 QC 应用程序,并且我正在使用 System.Text.Json 序列化具有 List&lt;T&gt; 属性的包装对象,这些对象是对发布到服务器并保存在数据库中的 QC 问题的答案。 但是 List 中的每个项目都没有被序列化,因此发布的请求有一个空 List 。

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

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

有没有人知道为什么会发生这种情况或是否有要打开的设置?

非常感谢。

【问题讨论】:

标签: c# blazor system.text.json .net-5


【解决方案1】:

虽然以前版本的 System.Text.Json 只能序列化公共属性,但从 .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 终于支持字段了。
  • @AloisKraus 以及序列化程序的显着性能改进。
  • 是的。我这里有一个基准套件:github.com/Alois-xx/SerializerTests/blob/master/Serializers/…
  • 虽然这可行,但更受欢迎的解决方案是将{ get; set; } 添加到所有这些字段,使其成为属性。
猜你喜欢
  • 2011-09-09
  • 2012-08-23
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多