2017-10-01 28 views
0

を投稿するPostAsyncを使用しているとき、私は次の形式でjsonArrayを作成することができたん内容:私は今使用してサーバに「JsonArray」を送信しようとしています[{"id":3},{"id":4},{"id":5}]以下のコードを使用してJSON

var jArray = new JsonArray(); 
     int numOfChildren = 10; 
     for (int i = 0; i < numOfChildren; i++) 
     { 
      if (CONDITION == true) 
      { 
       var jObj = new JsonObject(); 
       int id = SOMEID; 
       jObj.SetNamedValue("id", JsonValue.CreateNumberValue(id)); 
       jArray.Add(jObj); 
      } 

PostAsyncは次のようになります。

Uri posturi = new Uri("http://MYURI"); 
HttpContent content = new StringContent(jArray.ToString(), Encoding.UTF8, "application/json"); 
System.Net.Http.HttpResponseMessage response = await client.PostAsync(postUri, content); 

サーバー側では、投稿要求にコンテンツが含まれていないことがわかります。 interwebsを掘り下げた後、StringContent内のjArray.ToString()を使用することが原因であるように見えますが、なぜか、それが最初の問題であったとしても理解できません。だから、なぜ私のコンテンツが欠落していますか? JSON.netを使用しないUWPアプリケーションのためにこれを書いています。

答えて

0

多くの掘削後、私は最終的にJSON.netのJsonConver.SerializeObjectを使用して2つの異なるアプリケーション、私のオリジナルjArray.ToStringと1()と別のWiresharked()。 Wiresharkでは、2つのパケットの内容が同じであることがわかりました。そのことは、私の問題がサーバ側にあることを私に伝えました。私は結局、入ってくるPOSTリクエストを処理するPHPスクリプトがあまりにもリテラルで、 'application/json'というタイプのjson投稿のみを受け入れることに気付きました。私のUWPアプリケーションは、 'application/json'というタイプのパケットを送信しました。 charset = utf-8 'となります。私のコンテンツの一部をサーバー側で少しずつ緩めた後、すべてうまくいった。

jsonArray.ToString()またはjsonArray.Stringify()がJSON.netを使用せずにjsonをシリアル化しようとする人にとって、どちらもうまくいきます。

-1

シリアライザを使用して文字列に変換する必要があります。 NewtonSoft JSON Nugetを使用してください。

string str = JsonConvert.SerializeObject(jArray); 
HttpContent content = new StringContent(str, Encoding.UTF8, "application/json"); 
System.Net.Http.HttpResponseMessage response = await client.PostAsync(postUri, content); 
関連する問題