【问题标题】:Android JSon Object Not readable in dotnet webservice for insert operation in RESTAndroid JSON对象在dotnet webservice中不可读,用于REST中的插入操作
【发布时间】:2010-10-22 07:06:41
【问题描述】:

Json 对象返回到一个获取 i/p 的 web 服务

[OperationContract(Name = "Create")]
[WebInvoke(UriTemplate = "/Create/Data", Method = "POST",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat=WebMessageFormat.Json)]

bool CreateCustomer(StringBuilder objCustomer);

//在我的服务文件中,我将 i/p obj 反序列化为我的类对象并插入

public bool Create(StringBuilder strObj)
    {
        JavaScriptSerializer js = new JavaScriptSerializer();

        Customer custObj = js.Deserialize<Customer>(strObj.ToString());

        bool Inserted = false;

//建立连接并放入数据

来自 im asp.net 客户端的 obj 被序列化为 json 格式,它可以插入到我的数据库中,但从 android 中,我的服务无法识别他们发送的 JSON 对象..但是对他们的响应去作为“OK 200”..

安卓代码是

HttpClient client = new DefaultHttpClient(); 
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit 

HttpResponse response; 
JSONObject json = new JSONObject();
String URL ="http://10.242.48.54/restinsert/Service1.svc/Create/Data";
try{ 

    HttpPost post = new HttpPost(URL); 
    json.put("CNo",200);
    json.put("CName","addme");

    StringEntity se = new StringEntity(json.toString());
    se.setContentType("application/json; charset=utf-8");
    se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json; charset=utf-8"));

    post.setHeader("Accept","application/json");
    post.setHeader("Content-type","application/json; charset=utf-8");
    String ss= post.toString();

    response = client.execute(post);

为序列化和反序列化创建了一个新类

public class Json
{
    public string JsontoString(string obj)
    {
        JavaScriptSerializer js = new JavaScriptSerializer();
        StringBuilder sb = new StringBuilder();
        js.Serialize(obj, sb);
        return sb.ToString();
    }

    public string StringtoJson(string obj)
    {

        JavaScriptSerializer js = new JavaScriptSerializer();
        Customer custObj = js.Deserialize<Customer>(obj.ToString());
        return custObj.ToString();
    }
}

}

【问题讨论】:

  • 那么您的意思是在您的Android 应用程序中创建一个JSON 对象并将其发送到您的.NET Web 服务?而您的 .NET Web 服务无法解析/反序列化该对象?您可能希望包含显示如何在 Android 应用程序中创建 JSON 对象的代码,否则很难帮助您...
  • 是的......但我有在android中创建json的代码,在它请求我的服务后,响应显示“OK 200”的状态......但我的数据没有被访问REST 服务.. :(
  • “未被我的 REST 服务访问”是什么意思?当 Web 服务尝试解析/反序列化数据时,您是否遇到异常(在运行 Web 服务的服务器上)?如果是这样,您应该在问题中包含错误消息以更好地理解问题。正如我上面所说的,如果您在 Android 应用程序中包含创建 JSON 对象的代码,这可能会很有用。因此,请使用更多信息/代码/错误消息更新您的问题,然后也许有人可以帮助您。
  • 没有错误消息..它显示来自 RESTservice 的响应是完美的..但是我的休息服务没有插入数据...如果我创建了一个 asp.net 客户端并插入, REST服务是正确的..!!
  • 这是安卓代码

标签: android json rest


【解决方案1】:
StringEntity se = new StringEntity(json.toString(), "utf-8");

【讨论】:

    【解决方案2】:

    从未使用过 Json 序列化程序,但对 WCF 如何进行反序列化略有了解,我会说您不能将 StringBuilder 作为参数。

    只需将您的操作签名更改为:

    bool CreateCustomer(Customer customer);
    

    WCF 想要自己做序列化和反序列化,所以就让它吧。

    【讨论】:

    • 但是 android 客户端是否可以将对象作为客户发送?他们可以将 json 反序列化到客户 obj 并发送到 .net wcf REST 吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多