Я искал ответ на этот вопрос повсюду и нашел его.
Я поделюсь для всех, кто испытывает ту же проблему:
Служба отдыха WCF.
Изучение WCF и Android одновременно заставило меня поверить, что ответ от WCF должен быть сериализованным String в формате Json.
Для этого объект .Net, массив или что-либо еще будет проходить через DataContractJsonSerializer, прежде чем он будет возвращен в виде строки в Android для дальнейшего анализа.
Примерно так:
Dim stream1 As MemoryStream = New MemoryStream
Dim ser As DataContractJsonSerializer = New DataContractJsonSerializer(GetType(myType))
ser.WriteObject(stream1, myThing)
Dim _json As String = Encoding.UTF8.GetString(stream1.ToArray())
stream1.Close()
return _json
Неправильно.
Сохраните ваш объект, массив или что-либо еще и верните его вместо этого; WCF позаботится о правильном побеге для вас.
Например (это VB);
IService:
<OperationContract()> _
<WebGet(BodyStyle:=WebMessageBodyStyle.WrappedRequest, RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Json, UriTemplate:="/MyKit/{AccountID}")> _
Function GetKit(ByVal AccountID As String) As MyKit
Услуги:
Public Function GetKit(ByVal AccountID As String) As MyKit Implements IService1.GetKit
Dim allKit As New MyKit() //Your object
objDal.CommandText = 'run some sql here - or whatever
Using dr As SqlDataReader = "blah"
//populate your object
End Using
Return allKit //return the object, not the string representation of it
End Function
Использование DataContractJsonSerializer для отправки в качестве Json на Android из WCF эффективно «предварительно экранирует» данные. Когда он попадает в Android, анализатор Json не может его обработать, поскольку он также экранирует данные.