У меня есть .net Webservice, который должен взаимодействовать с приложением Java через json.
Теперь у меня есть метод на стороне сервера, который выглядит следующим образом:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public DateTime GetDate(DateTime input)
{
return input;
}
изПриложение C # я могу отправить получить значение DateTime.Это соглашение, что значения Date сериализуются как:
\/Date(1279176056000)\/
, где число определяется в секундах с начала эпохи.Поэтому, если я хочу вызвать этот сервис, моя строка запроса json должна выглядеть следующим образом:
{"input":"\/Date(1279176056000)\/"}
Как бы то ни было, я не знаю, как этого добиться с помощью классов 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, но я действительно хочу отправлять и получать более сложные объекты / массивы, содержащие свойства Date, и я не хочу сам обрабатывать все поколение JSON.