2015-12-01 51 views
5

到字典中我有一个Web API方法,看起来像这样:的WebAPI - 发布使用JSON

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

我的电子邮件类看起来像这样目前:

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; } 

而且我张贴到我Post方法使用提琴手,像这样:

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字典外,所有电子邮件字段均已填充。为了正确传递,我需要做些什么?我的json结构是否不正确?

+1

岂不是(JSON数组内)'{ “值”: “东西”,”键“:”key1“}'? (具体取决于你如何封装你的json,它可能是Value的关键) – Igor

+0

'HandleBars'是一个'''',你只传递一个'string',以及你应该给内部内容'HandleBars'名称'键'和'值' – ragerory

+0

看到,这里已经是一个回应http://stackoverflow.com/questions/2494294/sending-a-json-array-to-be-received-as-a-dictionarystring -string – meorfi

回答

6

默认JsonFormatter无法绑定来自Javascript ArrayDictionary,因为它没有为每个项目定义一个键。

你需要使用一个Object代替:

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

这样做了。谢谢。 – ygetarts

0

你应该有

{ 
    "Body": "body", 
    "From": "from", 
    "To": "to", 
    "Template": "template", 
    "HandleBars": [ 
     { key: 'key1', value: 'something'} 
    ] 
}