我有一个.NET WebService,它应该通过JSON与Java应用程序通信。
现在我在服务器端有一个方法,如下所示:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public DateTime GetDate(DateTime input)
{
return input;
}
从C应用程序,我可以发送一个接收日期时间值。按照惯例,日期值序列化为:
\/Date(1279176056000)\/
其中,数字定义为自epoch以来的秒数。
因此,如果我想调用该服务,我的JSON请求字符串必须如下所示:
{"input":"\/Date(1279176056000)\/"}
Howevery,我不知道如何用JSON.Org.*类在Java方面实现这一点。
问题是:如果我使用此代码:
JSONObject json = new JSONObject();
json.put("input", "\\/Date(1279176056000)\\/");
jsonObject足够智能,可以在通过线发送字符串之前对字符串本身进行转义,因此我得到:
{"input":"\\/Date(1279176056000)\\/"}
在服务器端反序列化期间会导致异常:
System.FormatException: \/Date(1279183256000)\/ is not a valid value for DateTime
bei System.ComponentModel.DateTimeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
bei System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)
bei System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)
bei System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object o, Type type, JavaScriptSerializer serializer)
bei System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary`2 rawParams)
bei System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)
bei System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)
bei System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)
长话短说:我怎样才能将反斜杠作为参数传递给JSONObject而不让它转义呢?
好吧,您可能认为我只是自己构建JSON字符串,但我真的想发送和接收包含日期属性的更复杂的对象/数组,我不想自己处理整个JSON生成。