【问题标题】:Passing JSON object from Android Client to WCF Restful service in C#在 C# 中将 JSON 对象从 Android 客户端传递到 WCF Restful 服务
【发布时间】:2012-01-07 02:15:31
【问题描述】:

我有一个 android 客户端,它将 JSON 对象形式的数据发送到我的服务器。我的服务器由 WCF 实现,充当用 C# 编写的 RESTful 服务。我的 WCF 中有一个名为“User”的类,我想在 android 客户端中执行登录操作。但是当我以 JSON 格式将对象发布到 WCF 服务时,我得到一个 Null 对象(在 Wrapped 配置中)或者我得到一个字段为空的对象(在 Bare 配置中)。有人对此有解决方案吗?

这是我的客户端生成的 JSON 示例:

{"User":{"UserName":"123","Pass":"123","Device":"123"}}

这是我的 WCF 接口代码:

    [OperationContract]
    [WebInvoke(Method = "POST",
        UriTemplate = "Login",
        BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json
      )]
    string Login(User user);

这是我的 App.Config :

<system.serviceModel>
<services>
  <service behaviorConfiguration="CityManService.TrackingBehavior"
    name="CityManService.Tracking">
    <endpoint address="" behaviorConfiguration="json" binding="webHttpBinding"
      contract="CityManService.ITrackingService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8731/CityManService/Tracking/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="json">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="CityManService.TrackingBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>

最后这是我的客户端(android)代码:

HttpPost request = new HttpPost("http://localhost:8731/CityManService/Tracking/Login");
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");

// Build JSON string
JSONStringer userJson = new JSONStringer()
    .object()
       .key("User")
          .object()
         .key("UserName").value(username.getText().toString())                                                                                                                                                        .key("Pass").value(password.getText().toString())                                                     .key("Device").value(password.getText().toString())
          .endObject()
       .endObject();

StringEntity entity = new StringEntity(userJson.toString(),"UTF-8");                                                
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
entity.setContentType("application/json");

request.setEntity(entity);

// Send request to WCF service
DefaultHttpClient httpClient = new DefaultHttpClient();             
HttpResponse response = httpClient.execute(request);

【问题讨论】:

    标签: c# wcf json


    【解决方案1】:

    包装器的名称应该是 parameter 名称,而不是 type 名称。在您的服务中,操作定义为

    [WebInvoke(...)] 
    string Login(User user);
    

    所以输入应该作为

    {"user":{"UserName":"123","Pass":"123","Device":"123"}}
    

    (注意小写的“用户”对象名称)。

    【讨论】:

    • 正是我的问题!!谢谢你的帮助。你救了我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多