gpt4 book ai didi

c# - 编写自己的 json 属性的最佳实践,该属性将被 json.net 反序列化忽略

转载 作者:行者123 更新时间:2023-12-04 09:36:37 24 4
gpt4 key购买 nike

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

    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] ?
question you link to , 只是草图:添加一个契约(Contract)解析器(一个用于影响 JSON.NET 中序列化的内置扩展点),它会检查您的自定义属性类型。那应该工作。然后对于不同的序列化场景,你传递不同的合约解析器。如果您需要帮助使其正常工作,请询问该问题,而不是关于继承密封属性的问题。
正如@MarcGravell 所指出的,如果您有不同的输出类型,请使用不同的 DTO 类和 AutoMapper 之类的东西来填充您的 DTO。也许尝试在相关的地方使用继承。让一种类型根据某些条件进行不同的序列化迟早会咬你。例如,您是否测试过反序列化?

关于c# - 编写自己的 json 属性的最佳实践,该属性将被 json.net 反序列化忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62551474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com