Web Api 2 – 自定义数据类型JSON序列化
我实际上是Web Api的新手,所以我的问题可能听起来有些奇怪。
我有简单的API来返回有关价格变化的历史信息。 我的控制器的动作如下所示:
[HttpGet] [Route("api/history/{id}/{size}")] public async Task<IEnumerable> GetHistory(string id, Size size)
其中PriceHistoryRecordModel是
[DataContract] public class PriceHistoryRecordModel { [DataMember] public DateTime Date { get; set; } [DataMember] public double Value { get; set; } }
但是,问题是 – action以下列格式返回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
并使用DateTime.Ticks
将日期时间转换为数字
上述就是C#学习教程:Web Api 2 – 自定义数据类型JSON序列化分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/955654.html