我在使用POST时未对ServiceStack Json客户端反序列化我的结果时遇到问题。 get方法在将响应反序列化为UserCredentials对象时没有问题,但是当我使用POST方法时,它会返回一个具有所有null属性的对象。如果我将传递给Post方法的类型更改为字典,我可以看到它获得了正确的结果,并且我可以看到其他调用在来自Fiddler的http级别成功。ServiceStack json客户端发布方法未正确反序列化
public UserCredentials Login(string uname, string pwd)
{
var url = "/login";
//note that I have to send a dictionary because if I sent a Login Object with username and password it erronously sends {Login:} in the raw request body instead of {"Uname":uname, "Password":password}
var login = new Dictionary<string, string>() { { "Uname", uname }, { "Password", pwd } };
var result = client.Post<UserCredentials>(url, login);
return result;
}
这里的响应(这是从服务器的正确和预期的HTTP响应)
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 14 Mar 2013 12:55:33 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Length: 49
{"Uid":1,"Hash":"SomeHash"}
这里是UserCredentials类
public class UserCredentials
{
public long Uid;
public string Hash;
}
为什么使用字典而不是UserCredentials实例? – kampsj 2013-03-14 14:28:05
我试着发送用户凭证,但是通过发送{Login:}而不是{Uname:“foo”,Password:“bar”}发生了错误。我宁愿发送UserCredentials,但我无法让它工作。有没有建议的方式来做到这一点? – MonkeyBonkey 2013-03-14 17:56:34
我想你将不得不发布整个代码,如果这些答案都没有解决它。 – kampsj 2013-03-14 22:47:59