JSON - косые черты и тип приложения..рефакторинг

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

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

{\ "firstName \": \ "Bill \", \ "lastName \": \ "Gates \", \ "email \": \ "[email protected] \", \ "deviceUUID \": \ "abcdefghijklmnopqrstuvwxyz \ "}

Который мне нужно избавиться от косых черт на стороне сервера .... нехорошо.

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

Person p = new Person();
            p.firstName = "Bill";
            p.lastName = "Gates";
            p.email = "[email protected]";
            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'};
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 388
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

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

s = "{\" firstName \ ": \" Bill \ ", \" lastName \ ": \" Gates \ ", \" email \ ": \" [email protected] \ ", \" deviceUUID \ ": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ\"}"

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

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

string(124) "{\"firstName\":\"Bill\",\"lastName\":\"Gates\",\"email\":\"[email protected]\",\"deviceUUID\":\"abcdefghijklmnopqrstuvwxyz\"}"

Мне это показалось простым в использовании: http://james.newtonking.com/archive/2008/02/11/linq-to-json-beta.aspx и http://james.newtonking.com/projects/json-net.aspx

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

Понятно

Было 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"
}]

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

Другие вопросы по теме