JSON - слэши и тип приложения .. рефакторинг - PullRequest
0 голосов
/ 21 ноября 2008

Мой код работает (да!), Который отправляет JSON на сервер .. Буду признателен за любые мысли о рефакторинге

1) Мой код C # отправляет этот JSON на сервер

{\ "Имя \": \ "Билл \", \ "LastName \": \ "Ворота \", \ "электронной почты \": \ "asdf@hotmail.com \", \ "deviceUUID \": \ "АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ \"}

Что я должен избавиться от косых черт на стороне сервера .... не хорошо.

2) Я использую application / x-www-form-urlencoded и, вероятно, хочу использовать application / json

Person p = new Person();
            p.firstName = "Bill";
            p.lastName = "Gates";
            p.email = "asdf@hotmail.com";
            p.deviceUUID = "abcdefghijklmnopqrstuvwxyz";

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetUri + "newuser.php");
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            //TODO request.ContentType = "application/json";

            JavaScriptSerializer serializer = new JavaScriptSerializer();
            string s = serializer.Serialize(p);
            textBox3.Text = s;

            string postData = "json=" + HttpUtility.UrlEncode(s);

            byte[] byteArray = Encoding.ASCII.GetBytes(postData);

            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close ();

            WebResponse response = request.GetResponse();
            //textBox4.Text = (((HttpWebResponse)response).StatusDescription);
            dataStream = response.GetResponseStream ();

            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd ();
            textBox4.Text += responseFromServer;

            reader.Close ();
            dataStream.Close ();
            response.Close ();

PHP-код на сервере:

$inbound = $_POST['json'];

// this strips out the \
$stripped = stripslashes($inbound);

$json_object = json_decode($stripped);
echo $json_object->{'firstName'};
echo $json_object->{'lastName'};
echo $json_object->{'email'};
echo $json_object->{'deviceUUID'};

Ответы [ 5 ]

1 голос
/ 21 ноября 2008
1 голос
/ 21 ноября 2008

Вы уверены, что у вас есть эти косые черты там? Это представление отладчика, в котором C # кодирует строку для отображения, но реальные значения, полученные из JavaScriptSerializer, не имеют косой черты в идентификаторе. Единственное, что может быть экранировано, это содержимое значения JSON ...

0 голосов
/ 21 ноября 2008

Понял

Было 2 проблемы:

PHP-сервер экранировал входящие данные, поэтому мне пришлось использовать полосы-черты.

http://nz.php.net/magic_quotes

Также парение над объектом в VS показало косую, но

Debug.Write(s);

показал:

[{"categoryid":"1","name":"funny","serverimageid":"1","dateuploaded":"2008-11-17 16:16:41","enabled":"\u0001"},{"categoryid":"2","name":"happy","serverimageid":"2","dateuploaded":"2008-11-17 16:17:00","enabled":"\u0001"},{"categoryid":"3","name":"sad","serverimageid":"3","dateuploaded":"2008-11-16 16:17:13","enabled":"\u0001"}]

Спасибо всем.

0 голосов
/ 21 ноября 2008

JSON.NET великолепен и его стоит потрудиться - он делает несколько вещей лучше, чем JavaScriptSerializer, но я точно знаю, что JavaScriptSerializer (и любой другой сериализатор JSON) не будет выводить идентификаторы с косой чертой. Это будет недействительным JSON.

0 голосов
/ 21 ноября 2008

Хорошие мысли ... Я проверил в VS и когда установить точку останова на textBox3.Text = s; и затем наведите курсор мыши на предыдущую строку s. Это показывает это:

s = "{\" firstName \ ": \" Bill \ ", \" lastName \ ": \" Gates \ ", \" email \ ": \" asdf@hotmail.com \ ", \" deviceUUID \ ": \" АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ \ "}"

Итак, я проверил и на стороне PHP:

$inbound = $_POST['json'];
var_dump($inbound);

строка (124) "{\" Имя \ ": \" Билл \ "\ "LastName \": \ "Ворота \", \ "электронной почты \": \ "asdf@hotmail.com \", \ "deviceUUID \": \" АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ \ "}"

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