gpt4 book ai didi

c# - 用于将 .net Web 服务反序列化为 DateTime() 的 Java JSONObject

转载 作者:行者123 更新时间:2023-11-30 09:54:27 29 4
gpt4 key购买 nike

我有一个 .net Web 服务,它应该通过 json 与 Java 应用程序通信。

现在我在服务器端有一个如下所示的方法:

    [WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public DateTime GetDate(DateTime input)
{
return input;
}

我可以从 C# 应用程序发送一个接收日期时间值。按照惯例,日期值被序列化为:

\/Date(1279176056000)\/

其中数字定义为自纪元以来的秒数。因此,如果我想调用该服务,我的 json 请求字符串必须如下所示:

{"input":"\/Date(1279176056000)\/"}

但是,我不知道如何在 Java 端使用 json.org.* 类来实现它。
问题:如果我使用这段代码:

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 生成。

最佳答案

我遇到了同样的问题。在提交值之前,我做了一个 replaceAll。对于 Java 和 RegEx,它有很多斜杠需要正确转义。

JSONObject json = new JSONObject();
json.put("input", "\\/Date(1279176056000)\\/");

String stringToSubmit = json.toString().replaceAll("\\\\\\\\", "\\\\");

关于c# - 用于将 .net Web 服务反序列化为 DateTime() 的 Java JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256843/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com