2016-04-01 8 views
0

C#アプリケーション内でPUTリクエストを送信しようとしていますが、リクエストの本文はJSON形式である必要があります。物事はすなわち、このように、非常に単純な形式であるJSONペイロードのためにうまく働いている:C#でネストされたJSONペイロードを使用してPUTリクエストを送信するにはどうすればよいですか?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "PUT"; 
request.ContentType = "application/json"; 
using (var streamWriter = new StreamWriter(request.GetRequestStream())) 
{ 
     var serializer = new JavaScriptSerializer(); 
     string json = serializer.Serialize(new 
     { 
      id = "1", 
      title = "foo", 
      body = "bar", 
      userId = "1" 
     }); 
     streamWriter.Write(json); 
} 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

、私がしたい場合:

{ 
    id: 1, 
    title: 'foo', 
    body: 'bar', 
    userId: 1 
} 

これは私がこのシナリオを処理するために書かれているコードです。別のJSON形式のペイロードを作成するこのように:

{ 
    object = 
    { 
     id = "1" 
     title = "foo", 
     body = "bar", 
     userId = "1" 
    } 
} 

私はすなわち、二度シリアライズする必要があります。

var serializer = new JavaScriptSerializer(); 
var serializer1 = new JavaScriptSerializer(); 
string json = serializer.Serialize(new 
{ 
    object = serializer1.Serialize(new 
    { 
      test = "test" 
      title = "foo", 
      body = "bar", 
      userId = "1" 
     }),    
}); 

しかし、それは非常に効率的では見えません。これを行うより良い方法はありますか?

+0

です。この旧式のシリアライザはまだ使用していますか? –

+0

@MatíasFidemraizerええと、初めてC#を使用しています。これはMSDNのドキュメントで探している最初の結果です。/もっと良いオプションがあることを知っておいてください。 – user1301428

答えて

2

Json.NETのように、JavaScriptSerializerよりも優れたものを使用することをお勧めします。しかし、とにかくも、あなたが二度シリアライズする必要はありませんので1で、ちょうどん:シリアライズするとき

string json = serializer.Serialize(new { 
    @object = new 
    { 
     id = "1", 
     title = "foo", 
     body = "bar", 
     userId = "1" 
    }}); 

は、実際には2回間違ったJSONを生成:「オブジェクトは」jsonのではなく、JSONオブジェクトを含むだけの文字列になります。

+0

私は思ったよりも簡単です。 – user1301428

1

二重シリアル化は必要ありません。シリアライズするオブジェクトは

new { 
    @object = new { 
     id = "1", 
     title = "foo", 
     body = "bar", 
     userId = "1" 
    } 
} 
関連する問題