使用Python序列化ASP.NET样式JSON日期

时间:2013-06-13 14:37:53

标签: python asp.net-mvc json

我需要调用一个用ASP.NET MVC编写的Web服务,它接受JSON作为输入。 JSON包含日期字段。 ASP.NET期望日期序列化如下:

\/Date(1371071410)\/

(注意:这是一个单反斜杠后跟一个前向闪存;本质上是一个转义的正斜杠,它是有效的JSON,尽管你通常不会这样做。)

我试图说服Python的json库像这样编码datetime,但到目前为止还没有运气。基本上,如果我尝试像上面那样编码,json库会转义反斜杠,将字符串转换为:

\\/Date(1371071409)\\/

(注意双反斜杠。)

这使得ASP.NET的反序列化程序拒绝将其解析为日期。

如何防止Python的json库避免转义反斜杠?

1 个答案:

答案 0 :(得分:3)

所有字符串编码都在json.encoder模块中进行,更具体地说,在encode_basestringencode_basestring_ascii函数中进行。

因此,要更改字符串的编码方式,可以将这些函数包装起来以返回所需的表示形式。

或者,如果您查看编码器encodes an int的方式,可以使用自定义字符串表示法对int进行子类化,因为此处的日期不过是一个int,无论如何:

import json

class IntDate(int):
    def __str__(self):
        return r'"\/Date(%s)\/"' % super(IntDate, self).__str__()

print(json.dumps({'date': IntDate(1371071409)}))

打印:

{"date": "\/Date(1371071409)\/"}