json, wcf и дроби в строке - PullRequest
       2

json, wcf и дроби в строке

0 голосов
/ 21 декабря 2011

Если вы проверите мои предыдущие вопросы, вы увидите, что все они каким-то образом связаны с "\" или "/" для Android и почему мои реализации кода не работали, когда были версии других людей.

Теперь я знаю, почему мой не работал.

Я разрабатываю для live client, у кого есть доступ к системе управления контентом, из которой я получаю данные.Помимо общих проверок, они могут публиковать на сайте все, что захотят.

Они публикуют размеры в дюймах;например, 5-1 / 2

Именно это, и только это, что испортило мой Restful json.

Например, 1 восьмая стала

 1\\\/8

В настоящее время я делаю перезапись строки в точке WCF, чтобы поймать эти «дроби» и превратить их в десятичную, так что яможет продолжить развитие.Но я не могу написать код для каждого случая, и Android / Eclipse не работает на JSONArray json=new JSONArray(result);

. Буду признателен за любые данные по этому вопросу.

Дейв

Ответы [ 2 ]

0 голосов
/ 24 декабря 2011

Я искал ответ на этот вопрос повсюду и нашел его.

Я поделюсь для всех, кто испытывает ту же проблему:

Служба отдыха 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 не может его обработать, поскольку он также экранирует данные.

0 голосов
/ 22 декабря 2011

При размышлении и дальнейшем расследовании проблема заключается не в сбежавших дробях. Это нечто более фундаментальное. Закрою вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...