JSON - eğik çizgiler ve uygulama tipi .. üstlenmeden

5 Cevap

Benim kod sunucusuna json gönderir (evet) .. üstlenmeden herhangi bir düşünce takdir ediyorum çalışıyor

1) Benim C # kodu sunucuya bu json gönderir

{\"firstName\":\"Bill\",\"lastName\":\"Gates\",\"email\":\"asdf@hotmail.com\",\"deviceUUID\":\"abcdefghijklmnopqrstuvwxyz\"}

Ben sunucu tarafında bölü kurtulmak zorunda .... iyi değil.

2) application / x-www-form-urlencoded kullanan ve muhtemelen uygulama / json kullanarak istiyor değilim

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 ();

Server üzerinde PHP Kodu:

$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 Cevap

Eğer orada bu eğik olduğundan emin misiniz? Yani C # ekran için dize kodlar ayıklayıcı görünümü, ama JavaScriptSerializer çıkan gerçek değerleri tanımlayıcı herhangi bir bölü çizgisi yok. Kaçan alır tek şey JSON değer içerik ...

Good thoughts... I've checked in VS and when set a breakpoint on textBox3.Text = s; and then hover over the previous line s. It shows this:

s = "{\"firstName\":\"Bill\",\"lastName\":\"Gates\",\"email\":\"asdf@hotmail.com\",\"deviceUUID\":\"abcdefghijklmnopqrstuvwxyz\"}"

Yani, ben de PHP tarafında kontrol ettik:

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

string(124) "{\"firstName\":\"Bill\",\"lastName\":\"Gates\",\"email\":\"asdf@hotmail.com\",\"deviceUUID\":\"abcdefghijklmnopqrstuvwxyz\"}"

JSON.NET büyük ve çalışma dışarı iyi değer - JavaScriptSerializer daha iyi bir şeyler yapar, ama ben bir gerçeği biliyorum JavaScriptSerializer (ve diğer json serializer) slashesle olmaz çıktı tanımlayıcılar. Bu geçersiz JSON olurdu.

Got it

2 sorun vardı:

PHP sunucu gelen verileri kaçan, bu yüzden stripslashes kullanmak zorunda kaldı.

http://nz.php.net/magic_quotes

Ayrıca VS özelliği üzerinde gezinip indirdi gösterdi ama

Debug.Write(s);

göstermiştir:

[{"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"}]

Herkese teşekkürler.