Hallo
Ich stehe vor dem Problem das ich jetzt komplexte Objekte mit Android an einen WCF Service übermitteln muss. Bislang waren es nur einfache Datentypen die man einfach mit ToString() übermitteln konnte. Aber bei komplexen Datentypen laufe ich voll auf.
Interface:
Code
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
List<StammdatenUpdate> RecordsUpdate(StammdatenType type, HashList listWithHashes);
Implementation:
Code
public List<StammdatenUpdate> RecordsUpdate(StammdatenType type, HashList listWithHashes)
{
switch(type)
{
case StammdatenType.Client:
return PITServiceApplication.GetDao<StammdatenDao>().ReadClientList(listWithHashes);
default:
return new List<StammdatenUpdate>();
}
}
Klasse HashList:
Code
public class Hash
{
private long m_Id;
private string m_Sha1Hash;
public long ID
{
get
{
return this.m_Id;
}
set
{
this.m_Id = value;
}
}
public string Sha1Hash
{
get
{
return this.m_Sha1Hash;
}
set
{
this.m_Sha1Hash = value;
}
}
}
public class HashList : List<Hash>
{
}
Alles anzeigen
Android:
Code
...
//objectCollection => hier sind die zu übermittelnden Daten drin.
Hash[] hashes = new Hash[objectCollection.size()];
for(int i = 0; i < objectCollection.size(); i++)
{
ObjectBase objectBase = (ObjectBase)objectCollection.get(i);
Hash hash = new Hash();
hash.setId(objectBase.getId());
hash.setSha1Hash(objectBase.getSha1Hash());
hashes[i] = hash;
}
...
Gson gson = new GsonBuilder().create();
String url = postData.getUrl();
String[] parameters = new String[] { "type", "listWithHashes" };
String[] values = new String[] { gson.toJson(StammdatenType.CLIENT), gson.toJson(hashes) };
// Durch alle Parameter laufen und die Felder abfüllen.
JSONObject data = new JSONObject();
List<NameValuePair> nameValuesPair = new ArrayList<NameValuePair>(parameters.length);
for(int pos = 0; pos < parameters.length; pos++)
{
nameValuesPair.add(new BasicNameValuePair(parameters[pos], values[pos]));
data.put(parameters[pos], values[pos]);
}
...
se = new StringEntity(data.toString());
httpPost.setEntity(se);
Alles anzeigen
Die WCF Seite kann damit nichts anfangen. Mit gson ein String zu erstellen damit ich das Objekt hashes übertragen kann wird dem WCF nicht schmecken. Das sieht dann in etwas im WCF wie folgt aus.
Code
<type type="string">0</type>
<listWithHashes type="string">[{"Sha1Hash":"3c0fa90c9e358d699b7afeebb5f487c2405eec81","ID":10}
Ich denke das Problem liegt beim type="string". Dort müsste wahrscheinlich type="HashList" stehen. Nur, wie bekomm ich das korrekt hin?