【问题标题】:How to deserialize my data that I sent to my webservice?如何反序列化我发送到我的网络服务的数据?
【发布时间】:2026-02-01 14:20:05
【问题描述】:

如何反序列化我在 asp.net webservice 中作为 json 对象发送的这个字符串。

HttpClient client = new DefaultHttpClient();  

HttpPost post = new HttpPost("http://server/NCO/webservice.asmx/GetNRIC");   

post.setHeader("Content-type", "application/json");

post.setHeader("Accept", "application/json");

JSONObject obj = new JSONObject();

obj.put("ic", "s1111111b");

post.setEntity(new StringEntity(obj.toString(), "UTF-8"));

HttpResponse response = client.execute(post);  

【问题讨论】:

    标签: android asp.net web-services deserialization


    【解决方案1】:

    您将需要一个实用程序类,其中包含如下方法。

     public static T JsonDeserialize<T> (string jsonString)
     {
         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
         MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
         T obj = (T)ser.ReadObject(ms);
         return obj;
     }
    

    查看this link 了解更多详情。无论如何,如果您在双方都使用数据传输对象 (DTO),您会发现这种序列化和反序列化方案更容易。然后,您不必从 Android 端手动排列 JSON 字符串。为此,您可能还需要 Android 端的 JacksonMapper 将 DTO 直接转换为字符串。 在 ASP.NET 方面,即使您可以拥有相同的实体类,因此反序列化变得更加容易

    RequestDTO requestDTO = JsonHelper.JsonDeserialize<RequestDTO>(jsonString);
    

    【讨论】:

    • 对不起,我可以知道 T 和 ms 是什么吗?它是像字符串还是对象这样的变量?当我返回 obj 时,它是作为字符串返回还是必须转换它从对象到字符串?
    • 实际上它是您可能需要的 DTO 对象。假设您要检索一个学生对象。您需要创建一个 Student.class,其中包括您想要的字段并且 T 应该是 Student。因此,您将获得一个返回的 Student 对象,该对象是您从客户端传递的。 MemoryStream 用于指定您的编码类型。在您的场景中,它是 UTF-8。
    • 我有什么需要导入的吗?它说找不到datacontractjsonserialiser和编码的类型或命名空间。
    • 你通过上面的链接了吗? codeproject.com/Articles/272335/… 似乎需要此导入:使用 System.Runtime.Serialization.Json;
    • 啊,是的,我已经修复了导入。现在关于调用httpost的方法,它会是什么? /JsonDeserializer?
    最近更新 更多