WebApi 自定义 JsonConverter 未调用

2024-05-23

我为 Guid 实现了一个自定义 JsonConverter。

如果我在像这样序列化的类的属性(Guid 类型)上声明它

[JsonConverter(typeof(JsonGuidConverter))]

然后它被调用并且工作正常。

但是,我想“自动”使用它,而不需要属性,所以我这样做:

var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new JsonGuidConverter());

不幸的是,这导致我的转换器永远不会被调用。我在 MVC 5.1 项目中使用 WebApi 2.1。

有任何想法吗?

编辑:这是转换器代码

public class JsonGuidConverter : JsonConverter
{
    public override bool CanRead
    {
        get
        {
            // We only need the converter for writing Guids without dashes, for reading the default mechanism is fine
            return false;
        }
    }
    public override bool CanWrite
    {
        get
        {
            return true;
        }
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(Guid) || objectType == typeof(Guid?);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
    {
        // We declared above CanRead false so the default serialization will be used
        throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
    {
        if (value == null || Guid.Empty.Equals(value))
        {
            writer.WriteValue(string.Empty);
        }
        else
        {
            writer.WriteValue(((Guid)value).ToStringNoDashes());
        }
    }
}

附加注意,当尝试通过将其添加到转换器集合来使用它时,甚至不会调用 CanRead/CanWrite 属性和 CanConvert 方法。

也许这与我如何从 webapi 控制器返回数据有关?

public async Task<IHttpActionResult> GetSettings()
{
    ...
    return Json(something);
}

由于您正在使用格式化程序,因此请勿使用Json(something)从行动返回时,而是使用Content(something)在这种情况下。这Content帮助程序将遵循格式化程序的设置。

我同意Jsonhelper 在这里令人困惑,我希望我们永远不要将其包含在我们的产品中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebApi 自定义 JsonConverter 未调用 的相关文章

  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 但说真的...... ASP.NET WebAPI 实现示例(包括 OAuth)

    我真的对 WCF 示例不感兴趣 我发现的 DotNetOpenAuth 实现也是不完整的 https github com DavidChristiansen DotNetOpenAuth WebAPI 40 or 假设WCF https
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何将单引号转义为双引号转义为单引号

    以下是符合此描述的命令行示例 curl http dumbdomain com solr collection2 update json H Content type application json d add doc uid 79729
  • 使用 PHP 从 Mongo 解码 JSON

    我已经看过这个线程 PHP 解码嵌套 JSON https stackoverflow com questions 3555335 php decode nested json并没有设法用它来解决我的问题 我目前正在从 Mongo 获取 J
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • 如何使用jq将JSON对象流转换为数组

    我想用jq将 json 对象流放入 json 数组中 例如 来自 a 1 b 2 to a 1 b 2 但这是行不通的 echo a 1 b 2 jq 自从我得到 a 1 b 2 用吸吮它 s option jq s lt lt lt a
  • 如何循环遍历 JSON 数组?

    我有一些 JSON 代码 其中包含多个对象 MNGR NAME Mark MGR ID M44 EMP ID 1849 MNGR NAME Steve PROJ ID 88421 PROJ NAME ABC PROJ ALLOC NO 49
  • 将 JSON 文件读入 Spark 时出现 _corrupt_record 错误

    我有这个 JSON 文件 a 1 b 2 这是通过Python json dump方法获得的 现在 我想使用 pyspark 将此文件读入 Spark 中的 DataFrame 根据文档 我正在这样做 sc SparkContext sql
  • 从 .NET OData 4 客户端调用嵌套 Expand() 的正确方法

    Problem 在 Web API 上的 OData 4 服务中 从 NET 客户端调用嵌套 expand 的正确方法是什么 我们正在使用OData 客户端生成器 http visualstudiogallery msdn microsof
  • 如何从文本文件中检索多个 JSON 对象,其中对象*不*由分隔符分隔?

    我有数千个包含多个 JSON 对象的文本文件 但不幸的是这些对象之间没有分隔符 这些对象存储为字典 其中一些字段本身就是对象 每个对象可能具有可变数量的嵌套对象 具体来说 一个对象可能如下所示 field1 field2 some valu
  • Spring REST 控制器返回带有空数据的 JSON [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个简单的 Spring Boot Web 应用程序 我正在尝试从服务器接收一些数据 控制器返回一个集合 但浏览器收
  • 在自定义对象中映射 JSON 对象

    我一直在搜索是否可以获取 JSON 字典或数组并将其直接映射到属性与 JSON 标签同名的自定义对象中 但我没有找到任何相关信息 我一直在手动解析 JSON 字典 如下所示 id deserializedObj nil id jsonObj
  • bash 脚本抱怨文件名太长

    所以我有一个脚本可以执行此操作 jq 是命令行 JSON 处理器 echo Getting LB Node IDs echo LB STATUS jq loadBalancer nodes id 最后一行的输出是 1 2 3 但是当我尝试将
  • JSON 从子对象获取父对象

    我怎样才能得到discount值如果品牌id 983 示例 JSON prods info rate 100 grocery brand A brand id 983 brand B
  • 使用 mongoimport 从 Windows 文件夹批量导入 MongoDB

    我的存档中有很多 json 文件 我需要将它们导入到 mongo 每一个操作中 我认为它可能是循环的 你对此有什么想法吗 如果您使用的是 Linux Unix shell 您可以尝试 for filename in do mongoimpo
  • 如何阅读网站内容?

    我是使用 python 2 7 的网络爬虫的新手 一 背景 现在 我想收集有用的数据AQICN org http aqicn org city shenyang usconsulate 这是一个很棒的网站 提供世界各地的空气质量数据 我想用
  • ASP.NET WebApi - 一个控制器中的多个 GET 操作

    I have Users控制器和基本 REST 模式工作得很好 不过我需要一种额外的模式users id usergroups这将返回该用户的所有用户组 实现这一点的最佳方法是什么 因为我想我将需要在更多控制器上使用类似的路由 仅使用默认值

随机推荐