0

我正在从我的 android 应用程序调用 asmx Web 服务中的 Web 方法,并且该方法接受一个 json 对象。当我调试我的应用程序时,它给了我以下异常“无法序列化 1001.10”(它是我的类变量值之一)。下面我通过硬编码值发送数据(用于测试目的)

            Item itm=new Item();
        ItemType itype=new ItemType();

    itm.Description="Good Product";
    itm.BarcodeNumber="1234";
    itm.Depreciation=(float) 100.56;
    itm.AgencyId=1;
    itm.ItemCode="Android";
    itm.ItemValue=(float) 9999.99;
    itm.PurDate=new Date(0);   //Date I am sending here...
    itm.PurValue=(float) 1001.10;

    itype.Itemname="Android App";
    itype.Make="Android Developers";
    itype.Model="2013 Model";
    itype.Year=new Date(0);

    itm.iType=itype;

在 itm.PurValue 之后出现“Cannont serialize 1001.01”异常(调试我的应用程序时捕获异常)

我认为这是由于日期格式,但由于我的 Web 服务接受 json 对象,我认为错误可能是我发送的对象的格式。

要将 java 对象转换为 json 对象,我已将 gson.jar 文件添加到我的 java 构建路径 - -libraries 中。

并使用 Gson 将 java 对象转换为 json 字符串并将该 json 字符串传递给 Web 服务。

当我运行该应用程序时,它中止并显示“不幸的是,我的应用程序停止工作”

这是我用于将 java 对象转换为 json 字符串的代码。

            Gson gson = new Gson();  //Exception Occurred at this point when control comes here it is giving as Invocation Target Exception 
    String json=gson.toJson(itm);

        p.setName("ThisItem");
    p.setValue(json);
    p.setType(String.class);
    request.addProperty(p);

其余代码很常见......但作为参考,我也在此处粘贴该代码。

           SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12);
        envelope.dotNet=true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidTSE=new HttpTransportSE(URL);

        try
        {
            androidTSE.call(Soap_Action, envelope);
            SoapObject response=(SoapObject) envelope.getResponse();
            return response.toString();
        }
        catch(Exception ex)
        {
            return ex.toString();
        }

当我使用上述 gson 代码调试我的应用程序时,我收到一个异常调用目标异常。

可能是什么问题?是我在对象中使用的日期格式还是将 java 对象转换为 gson 对象的格式?

最后我想说我想向我的 asmx Web 服务发送一个 json 对象。我怎么解决这个问题。请任何人都可以分享任何想法。我为这个错误奋斗了 7 个小时。

在此先感谢 Ganesh

4

1 回答 1

0

我知道我为时已晚,但对于其他寻找类似答案的人来说:

当我试图将一个字符发送到我的肥皂服务时,我遇到了这个错误。问题出在这段代码上:

p.setName("ThisItem");
p.setValue(json);
p.setType(String.class);
request.addProperty(p);

你需要做的是解决它:

request.addAttribute("This Item",json);

是的,这行得通!

于 2013-10-08T15:52:13.633 回答