是否可以通知 resharper 一个类将被反序列化,以阻止它提示“自动属性可以只获取”?特别是因为接受 resharper 建议使属性只获取将破坏使用 System.Text.Json 的反序列化。
下面是一个示例场景,我们有一个初始化列表,其内容被更新并随后被序列化。需要 setter 初始化程序,以便可以通过 System.Text.Json 反序列化对象。
public class MyClass
{
public List<int> Numbers { get; set; } = new(); // resharper warns property can be made get only
}
我很欣赏这可以通过“禁用评论”为每个属性(或整个文件)明确完成,但这相当丑陋。
// ReSharper disable once AutoPropertyCanBeMadeGetOnly.Global
最后一个微不足道的修复.. 将类分配为可序列化足以让 ReSharper 正确识别该类可能被反序列化。因此实际上需要属性设置器(或初始化器),即不再建议使属性“只获取”。
[Serializable] // resharper is now aware that the class may be deserialized and no longer suggests the property can be made 'get only'
public class MyClass
{
public List<int> Numbers { get; set; } = new();
}
Newtonsof.Json 即使没有设置也会反序列化;但是,如果您决定走艰难的道路并使用 Text.Json,请使用 init;而不是设置;不仅要使用 Text.Json 进行反序列化,还要防止 NullReference 异常。
using System.Text.Json;
public class MyClass
{
public List<int> Numbers{ get; init; } = new();
}