将Json传递给Web服务

时间:2017-01-20 13:19:26

标签: c# json web-services rest

我正在尝试将json数据推送到webservice;

这是我的样本数据;

    {
       "data" : {
       "username" : "demo",
       "password" : "demo1082*098/*42a", 
       "LoginToken" :     "AAFF540EC55DASEFBE7E3D8404AED31F6DD30CA2BFCE2433B9475E696GG38730"
       }
    }

这是我的网络服务;

public string Post([FromBody]string data)
List<Login> datas = JsonConvert.DeserializeObject<List<Login>>(data);

错误; Newtonsoft.Json.dll中出现“System.ArgumentNullException”类型的异常,但未在用户代码中处理

数据显示为NULL

我正在使用WebAPI,restful api,C#,visual std 2015

先谢谢。

EDIT;

我正在使用DHC chrome扩展来POST数据。 报头; Content-Type:application / json BODY;

{
           "data" : {
           "username" : "demo",
           "password" : "demo1082*098/*42a", 
           "LoginToken" :     "AAFF540EC55DASEFBE7E3D8404AED31F6DD30CA2BFCE2433B9475E696GG38730"
           }
        }

错误;

500内部服务器错误

EDIT; 我将错误归结为“字符串”类型的数据。当我将其改为“动态”时,我解决了这个问题。有人可以推荐我一个关键词而不是动态吗?

2 个答案:

答案 0 :(得分:3)

1)你必须创建一个像

这样的类
public class LoginData
{
    public string username {get;set;}
    public string password {get;set;}
    public string LoginToken {get;set;}
}

并在您的网络服务中使用如下

public string Post([FromBody]LoginData data)

2)我看到你已经创建了一个类名Login的以下行(如果你在json中有单个记录)

Login datas = JsonConvert.DeserializeObject<Login>(data);

所以你也可以使用

public string Post([FromBody]Login data)

答案 1 :(得分:-1)

其中一种方法如下,

创建请求类

    public class Data
{
    public string username { get; set; }
    public string password { get; set; }
    public string LoginToken { get; set; }
}

public class RootObject
{
    public Data data { get; set; }
}

和你的帖子方法

public string Post([FromBody]RootObject data)

现在你甚至不需要反序列化它。并且可以直接访问类的属性。