最佳做法是编写自己的 json 属性,该属性将被 de 序列化与 json.net 忽略



我正在尝试编写自己的属性。当我序列化或反序列化它具有此属性时,应忽略每个属性。 这是我的波科

public class Fren
{
[JsonIgnoreInDatabase]
public string Name { get; set; }

public int Age { get; set; }
}

输出应该是这样的

{"Age":0}

我试过什么

JsonIgnoreInDatabase : JsonIgnore

我希望我能从 JsonIgnore 继承,但它是密封的 我读到的也是编写自己的序列化程序,忽略自定义属性 有没有更好的方法?

编辑:将MyAttribute更改为JsonIgnoreInDatabase

属性本身不做任何事情,它们只是作为元数据编译到你的类型中。属性通常不会"运行"或"执行某些操作"。

JSON.NET 使用反射在类型成员上查找自己的JsonIgnore属性(和其他属性(。

因此,虽然您要求继承JsonIgnoreAttribute的"最佳实践"和"更好的方法",但除了修改 JSON.NET,发出拉取请求并希望它被接受之外,根本没有办法做您想做的事(它可能不会(。

但是,还有其他方法可以影响序列化。你可以研究一下。你为什么要这样做,[JsonIgnore]有什么问题?

您链接到的问题确实勾勒出了这一点:添加一个协定解析程序(用于影响 JSON.NET 中的序列化的内置扩展点(,用于检查自定义属性的类型。这应该行得通。 然后,对于不同的序列化方案,传递不同的协定解析程序。如果您需要帮助使其正常工作,请询问这一点,而不是继承密封属性。

正如@MarcGravell所示,如果您有不同的输出类型,请使用不同的 DTO 类和类似 AutoMapper 的东西来填充您的 DTO。也许尝试在相关的地方使用继承。让一种类型根据某些条件以不同的方式序列化迟早咬你的背。例如,您是否测试过反序列化?

最新更新