2015-12-01 7 views
5

で辞書に投稿私はこのようになりますウェブAPIメソッドがあります。WebAPIの - JSON

[HttpPost] 
[Route("messages")] 
public IHttpActionResult Post(IEnumerable<Email> email) 
{ 
    AddToQueue(email); 
    return Ok("message added to queue"); 
} 

マイEmailクラスは、現在、次のようになります。

public string Body { get; set; } 
public string From { get; set; } 
public string Template { get; set; } 
public string To { get; set; }   
public string Type { get; set; } 

そして私は、私に掲示しています次のような、フィドラーを使った投稿方法:

User-Agent: Fiddler 
Host: localhost:3994 
Content-Length: 215 
Content-Type: application/json; charset=utf-8 
[ 
{"Body":"body","From":"from","To":"to","Template":"template"}, 
{"Body":"body1","From":"from1","To":"to1","Template":"template1"}, 
{"Body":"body2","From":"from2","To":"to2","Template":"template2"} 
] 

これはうまくいきます。しかし、私は私の電子メールクラスに辞書を追加できるようにしたいので、それは次のようになります。

public string Body { get; set; } 
public string From { get; set; } 
public string Template { get; set; } 
public string To { get; set; }   
public string Type { get; set; } 
public Dictionary<string, string> HandleBars { get; set; } 

そして、私はこのように見て私の要求変更:しかし

[{ 
    "Body": "body", 
    "From": "from", 
    "To": "to", 
    "Template": "template", 
    "HandleBars": [{ 
     "something": "value" 
    }] 
}, 
{ 
    "Body": "body1", 
    "From": "from1", 
    "To": "to1", 
    "Template": "template1" 
}, 
{ 
    "Body": "body2", 
    "From": "from2", 
    "To": "to2", 
    "Template": "template2" 
}] 

を、ときPostメソッドがこれを受け取ると、HandleBarsディクショナリを除いて、すべてのEmailフィールドが設定されます。それを正しく渡すためには何が必要ですか?私のJSONは正しく構造化されていますか?

+1

が、それは '{ "値"(JSON配列内)ではないでしょう持っている必要があります。 "何か"、」 key ":" key1 "}'? (あなたのjsonをどのように囲んでいるかによってValue En Keyになるかもしれません) – Igor

+0

'HandleBars'は' 'で、' string'を1つだけ渡すだけでなく、内容を内部に渡す必要があります'HandleBars'の名前は' key'と 'value'です – ragerory

+0

参照、ここにはすでに応答がありますhttp://stackoverflow.com/questions/2494294/sending-a-json-array-to-be-received-as-a-dictarringring -string – meorfi

答えて

6

デフォルトのJsonFormatterは、各アイテムのキーを定義していないため、をJavascript Arrayからバインドできません。

あなたが代わりにObjectを使用する必要があります。

"HandleBars": { 
    "something": "value" 
} 
+0

これでした。ありがとう。 – ygetarts

0

あなたは

{ 
    "Body": "body", 
    "From": "from", 
    "To": "to", 
    "Template": "template", 
    "HandleBars": [ 
     { key: 'key1', value: 'something'} 
    ] 
} 
関連する問題