序列化为json时,将DateTime类型转换为long

时间:2017-02-23 14:53:55

标签: asp.net-mvc asp.net-web-api json.net

我有一个班级说这样的话:

public class Product {
    public int Id { get; set; }
    public string Name{ get; set; }
    public DateTime CreatedDate{ get; set; }
    public DateTime UpdatedDate{ get; set }
}  

并希望在使用此方法序列化为json时将所有DateTime类型转换为long:

private long convertDateToLong(DateTime datetime)
{
    DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    long ms = (long)(datetime - epoch).TotalMilliseconds;
    return ms;
}  

我怎么能在asp.net web api 2中做到这一点?

修改
我写了这段代码,但它并没有影响输出:

class DateTimeSerializer : BufferedMediaTypeFormatter
{

    public DateTimeSerializer()
    {
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
    }

    public override bool CanReadType(Type type)
    {
        return false;
    }

    public override bool CanWriteType(Type type)
    {
        if (type == typeof (DateTime))
            return true;
        else
            return false;
    }

    public override void WriteToStream(Type type, object value, Stream writeStream, HttpContent content)
    {
        using (var writer = new StreamWriter(writeStream))
        {
            var datetime = (DateTime )value ;
            if (datetime != null)
            {
                writer.Write(convertDateToLong(datetime));
            }
        }

    }

    private long convertDateToLong(DateTime datetime)
    {
        DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        long ms = (long)(datetime - epoch).TotalMilliseconds;
        return ms;
    }
}

注册:

config.Formatters.Add(new DateTimeSerializer());

编辑2

目前的json:

{ "Id" : 1 , "Name" : "Sample Product" , "CreatedDate" : "2017-02-23T18:37:18.4218582+03:30" , "UpdatedDate" : "2017-02-23T18:37:18.4218582+03:30"}  

期待json:

{ "Id" : 1 , "Name" : "Sample Product" , "CreatedDate" : 432309482358723 , "UpdatedDate" : 432309482358723}

0 个答案:

没有答案