【问题标题】:JsonConverter based on custom attribute基于自定义属性的 JsonConverter
【发布时间】:2020-01-22 01:15:34
【问题描述】:

我正在尝试以不同方式转换特定类的特定 IDictionary 字段。我正在考虑基于属性执行此操作,但看起来它不起作用。 是否有可能以某种方式获得与CanConvert 中的类型关联的CustomAttribute

 [CustomAttribute]
 public IDictionary<string, string> AdditionalData { get; set; }

 // Custom converter for CustomAttribute
 public override bool CanConvert(Type objectType)
 {
     return System.Attribute.GetCustomAttributes(objectType).Any(v => v is CustomAttribute);
 }

【问题讨论】:

    标签: c# json.net nancy


    【解决方案1】:

    如果您想使用属性将转换器应用于特定属性,只需使用[JsonConverter] 属性即可。真的没有必要自己发明。

    [JsonConverter(typeof(YourCustomConverterClass))]
    public IDictionary<string, string> AdditionalData { get; set; }
    

    请注意,如果您应用 [JsonConverter] 属性,则不再需要将该转换器的实例传递给序列化程序。此外,不会为该属性调用转换器的 CanConvert 方法,因为 Json.Net 已经知道您要使用转换器。

    【讨论】:

    • 谢谢布赖恩!但这种方法在南希不起作用。我正在使用 Nancy,它使用预配置的 JsonSerializer,它仅适用于预配置的全局转换器集。因此,如果我为 IDictionary 定义了自定义转换器,那么应​​用程序中的所有 IDictionary 类型都将使用自定义转换器进行转换。
    • JsonConverter 仅在从 Postman 发出请求时被忽略,但在从应用程序发出请求时运行良好,不确定是因为 postman 中的标头配置还是其他原因
    • 您可能应该提到您在问题中使用的是 Nancy;这似乎是一个重要的细节,特别是如果它在转换器工作方式方面具有特殊行为。通常,在 Json.Net 中,将 [JsonConverter] 属性放在属性上会导致它被序列化程序拾取,而不管设置中配置的任何其他转换器。如果这没有发生,那么听起来 Nancy 必须使用合约解析器,它出于某种原因消除了这种行为。不幸的是,我对南希一点也不熟悉,所以我无法帮你解决这个问题。
    • 我在您的问题中添加了 Nancy 标签。也许其他熟悉该框架的人可以帮助您。
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多