Serialize an array of ints to send using KSOAP2

TomaszRykala picture TomaszRykala · Feb 9, 2011 · Viewed 13.7k times · Source

I'm having a problem trying to send an array of ints to a .NET web service which expects an array in one of the arguments. That's at least what I understand from the API description on the web service which says this:

<dataIndexIDs>
<int>int</int>
<int>int</int> </dataIndexIDs>

So when I send a single int like below I do not get any errors and I think it works fine.

request.addProperty("dataIndexIDs", 63);

But when I try to send an array of ints:

request.addProperty("dataIndexIDs", new int[] {63, 62}); // array of ints

or a ArrayList of Integers:

ArrayList<Integer> indexes = new ArrayList<Integer>();
    indexes.add(63);
    indexes.add(62);
    request.addProperty("dataIndexIDs", indexes); // ArrayList of Integers

I get thrown a "java.lang.RuntimeException: Cannot serialize" exception. Any help please? What am I doing wrong? Thanks!

Answer

user1691694 picture user1691694 · Dec 12, 2012

I'm sending from an Android client to a .NET server, this worked for me

SoapObject myArrayParameter = new SoapObject(NAMESPACE, MY_ARRAY_PARAM_NAME);
for( int i : myArray ) {
    PropertyInfo p = new PropertyInfo();
    p.setNamespace("http://schemas.microsoft.com/2003/10/Serialization/Arrays");
    // use whatever type the server is expecting here (eg. "int")
    p.setName("short");
    p.setValue(i);
    myArrayParameter.addProperty(p);
}
request.addSoapObject(myArrayParameter);

Produces

 <classificationIds>
     <n4:short i:type="d:long" xmlns:n4="http://schemas.microsoft.com/2003/10/Serialization/Arrays">18</n4:short>
 </classificationIds>

Which looks terrible, but the server eats it anyway