你可以写一个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