Web Api 2 - 自定义数据类型JSON序列化

2023-11-29

我实际上是 Web Api 的新手,所以我的问题可能听起来有点奇怪。

我有简单的 API 来返回有关价格变化的历史信息。我的控制器的操作如下所示:

[HttpGet]
[Route("api/history/{id}/{size}")]
public async Task<IEnumerable<PriceHistoryRecordModel>> GetHistory(string id, Size size)

其中 PriceHistoryRecordModel 是

[DataContract]
public class PriceHistoryRecordModel
{
    [DataMember]
    public DateTime Date { get; set; }

    [DataMember]
    public double Value { get; set; }
}

但是,问题是 - 操作以以下格式返回 JSON

[{"Date":"2016-02-07T08:22:46.212Z","Value":17.48},{"Date":"2016-02-08T09:34:01.212Z","Value":18.37}]

但是,由于客户端对数据格式的特定要求,我需要我的 JSON 看起来像这样

[[1238371200000,17.48],[1238457600000,18.37]]

所以,我想知道

  • 是否有办法实现这种自定义序列化?
  • 我可以将此自定义序列化包装在属性中并将其用作方面吗?

你可以写一个CustomConverter像这样:

public class CustomCoverter : JsonConverter
    {
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            PriceHistoryRecordModel obj = value as PriceHistoryRecordModel;
            JToken t = JToken.FromObject(new double[] { obj.Date.Ticks, obj.Value });
            t.WriteTo(writer);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            throw new NotImplementedException();
        }

        public override bool CanConvert(Type objectType)
        {
            return typeof(PriceHistoryRecordModel).IsAssignableFrom(objectType);
        }
    }

指定我们的类由该转换器序列化:

[JsonConverter(typeof(CustomCoverter))]
[DataContract]
public class PriceHistoryRecordModel
{
    [DataMember]
    public DateTime Date { get; set; }

    [DataMember]
    public double Value { get; set; }
}

它可以工作,但是如果您只需要在这种特定情况下进行这种特殊处理,那么这会产生一定的开销。

如果您有许多类似的情况,您可以让您的类实现基类并为所有这些类使用此转换器。

在这个简单的情况下,快速解决方案是将返回类型更改为double[]:

public async Task<IEnumerable<double[]>> GetHistory(string id, Size size)

并将您的日期时间转换为数字DateTime.Ticks

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

Web Api 2 - 自定义数据类型JSON序列化 的相关文章

  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • GSON 将带有日历的对象反序列化为带有 Mongo 日期的 json 并返回

    我有一些实体 其中包含一些日历属性 我想以将它们存储为 GSON 序列化 JSON 中的日期的方式对其进行序列化 因为 Mongo 可以将 date 存储为 new ISODate 我们通常通过使用 ExclusionStrategy 忽略
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L

随机推荐

  • 最大字符串数组 VisualBasic WSH

    我正在 VB 中编写一个 WSH 脚本 以读取通过 Run 方法使用重定向目录列表生成的大量目录列表 目录列表大约有 8400 行 但是每次我运行脚本时 都会出现以下循环 执行直到 DirList AtEndOfStream Redim 保
  • 我可以手动注册/安装 Search.Collat​​orDSO.1

    我目前正在尝试使用 windows search 服务搜索一些索引文件 我的问题是 Windows 搜索无法安装在网络服务器上 因为它是 网络版本 收到的错误消息是 Search Collat orDSO 1 提供程序未在本地计算机上注册
  • Windows 忽略 JAVA_HOME:如何将 JDK 设置为默认值?

    如何说服 Windows 使用 JDK 而不是 JRE 这个问题之前已经在这里和其他地方被问过 如何设置默认 Java 安装 运行时 Windows 问题是 Windows 忽略了JAVA HOME它还忽略了我将 JDK bin 目录作为路
  • 如何检测Android是否完全支持USB?

    我的应用程序使用UsbManager与 USB 摄像头通信 有些设备不支持 USB 这些将返回null for UsbManager context getSystemService Context USB SERVICE 或者他们会抛出一
  • 放大 Plotly 热图

    目前 Plotly JS 热图中有 2 种 缩放 行为 在这里 您可以采用任何矩形形状进行缩放 单击 拖放 但是像素不是正方形的 这对于某些应用程序来说是不行的 不保留长宽比 有时应该保留 const z Array from length
  • 为什么在隐含时使用媒体查询类型“all”?

    我最近注意到我一直在使用all在每一个 media查询规则 我不明白为什么我这样做 我在网上搜索过 我发现大多数 media网络上的规则示例使用如下格式 media all and some other condition 为什么有媒体类型
  • 在 Firebase 中随机配对用户[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在使用 Flutter 和 Firebase 开发一个应用程序 我必须解决一个听起来像这样的问题 每个用户 在任何时候 都可以将自己置于等候名单 Firebase 必须通过以下方式
  • 使用正则表达式在 Visual Studio Code 中设置代码片段

    Comment prefix body 我已经设置了about代码片段 目的是添加注释 添加文件的基目录和文件名像这样但丢弃路径的其余部分 我相信这最初是基于 TextMate 片段 我已经尝试了一切 但我无法让它工作 这可能是愚蠢的事情
  • 在两个固定 div 元素之间创建滚动 div

    我对在网站中如何定位 div 不太熟悉 所以我希望有人可以在这里提供帮助 我想要得到的是一个三明治类型的设置 在两个 div 中间有一个滚动内容 这样我就有一个页眉 div 和一个页脚 div 它们都必须在页面上保持静态 然后 在它们之间
  • 一个组件可以有多个模板吗?

    有没有办法让 Angular 2 组件根据我想要放置的位置使用许多模板文件 例如 我有一个login组件 我想用两种不同的设计将其放置在我的网站上两次 有没有一种方法可以将模板传递给组件 不确定 NG2 是否有内置方法来支持这一点 我只是使
  • 在 C# 中检测(通过反射)Enum 类型是否为“Flags”类型的策略

    我使用反射来读取程序集中的类型 以生成代码 我可以看到一些枚举应该标有 Flags 属性 但编写这些枚举的人忘记添加此属性 有没有可靠的方法来检测枚举何时可以被视为 标志 枚举 我目前的策略是按降序读取枚举 并检查 element last
  • 如何生成 R 计数矩阵

    在 R 中 我可以使用我感兴趣的特定列名称作为数组返回计数结果 如下所示 require plyr bevs lt data frame cbind name c Bill Llib drink c coffee tea cocoa wat
  • 从 Java 游戏中删除对象(Eclipse)

    让我们开始吧 我有一个 处理程序 类 它充满了 getter 和 setter 并且其中包含添加和删除对象的代码 它看起来像这样 public void addObject GameObject object this object add
  • 尝试创建下拉菜单 pygame,但卡住了

    到目前为止 这是我的代码 import pygame as pg pg init clock pg time Clock Generating screen w scr 640 h scr 480 size scr w scr h scr
  • 在 Firefox 中禁用跨域 Web 安全

    在 Firefox 中 我该如何做相当于 disable web security在 Chrome 中 这个问题已经被发布了很多次 但从来没有一个真正的答案 大多数是附加组件的链接 其中一些在最新的 Firefox 中不起作用或根本不起作用
  • 如何在 Julia 中使用 JuMP 提取优化问题矩阵 A,b,c

    我使用符号变量和约束在 Julia JuMP 中创建了一个优化模型 例如以下 using JuMP using CPLEX model Mod Model CPLEX Optimizer sets I 1 2 Variables x var
  • Perl 中的读写锁

    我正在寻找一种在 Perl 中实现读 写锁的好方法 这是同步 Windows 和 Unix 上不同 Perl 线程和 或进程的文件访问所必需的 尝试过 Fcntl flock 如果它按预期工作 这对我来说将是完美的 不幸的是 看起来在压力下
  • 是否可以使用 appengine 模块和云端点?

    使用 appengine 模块意味着创建动态 Web 应用程序 而不是通常的 appengine Web 应用程序项目 云端点与常见的 appengine Web 应用程序项目配合良好 但这些项目不支持 appengine 模块 问题是 如
  • 从 XML 生成 SQL 架构

    我们正在使用 Oracle 11 数据库和 java 开发环境 使用 Eclipse 并且希望将多个 xml 模式迁移到 SQL 模式 看过 ax xsd 但确实需要一些我们可以从 ant 运行的东西 未安装 SQL Server 的 Ec
  • Web Api 2 - 自定义数据类型JSON序列化

    我实际上是 Web Api 的新手 所以我的问题可能听起来有点奇怪 我有简单的 API 来返回有关价格变化的历史信息 我的控制器的操作如下所示 HttpGet Route api history id size public async T