c#反序列化包含反斜杠的Http POST响应

本文关键字:Http POST 响应 反序列化 包含反 | 更新日期: 2023-09-27 18:15:26

我需要向我的Web API后端发出POST请求并检索&反序列化从它获得的响应,这样我就可以访问后端发送的'User'对象中返回的值。我成功发出请求并得到响应。

但是响应包含反斜杠。我很困惑,这种回应应该如何被反序列化。我的代码如下:

这是我的POST请求

var request = (HttpWebRequest)WebRequest.Create("MY_SERVER_URL/api/createitem");
request.ContentType = "application/json";
request.Method = "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
     //'data' is the object that contains the parameters
     string json = new JavaScriptSerializer().Serialize(data);
     streamWriter.Write(json);
}
var response = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
     var result = streamReader.ReadToEnd();
     string responseString = result.ToString();
     //responseString contains the response with back slashes
}

这是我得到的响应:

{'"$id'":'"1'",'"status'":'"200'",'"description'":'"Status OK'",'"user'":{'"$id'":'"2'",'"Id'":124200,'"Name'":'"Rown Doger'",'"Email'":'"rown@email.com'",'"Password'":123,'"DateJoined'":'"2016-10-28T20:20:50'",'"Picture'":'"'",'"AccessToken'":'"testtoken_3432'"}}

我如何用c#对其进行反序列化,并分别检索状态,描述和用户对象,以便我可以访问用户对象中的值?

编辑

来自后端的响应是有效的,因为它在Fiddler和Postman中正确显示。

c#反序列化包含反斜杠的Http POST响应

我访问了这里的enter link description,手动删除了所有斜杠并将其转换为object

public class User
{
    //public string __invalid_name__$id { get; set; }
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public int Password { get; set; }
    public string DateJoined { get; set; }
    public string Picture { get; set; }
    public string AccessToken { get; set; }
}
public class RootObject
{
    //public string __invalid_name__$id { get; set; }
    public string status { get; set; }
    public string description { get; set; }
    public User user { get; set; }
}

使用JavaScriptSerializer来反序列化:

  string json = "{'"$id'":'"1'",'"status'":'"200'",'"description'":'"Status OK'",'"user'":{'"$id'":'"2'",'"Id'":124200,'"Name'":'"Rown Doger'",'"Email'":'"rown@email.com'",'"Password'":123,'"DateJoined'":'"2016-10-28T20:20:50'",'"Picture'":'"'",'"AccessToken'":'"testtoken_3432'"}}";
  JavaScriptSerializer js = new JavaScriptSerializer();
  RootObject Res = js.Deserialize(json, typeof(RootObject)) as RootObject;

这将反序列化,但是你有两个特殊的字符属性,不会被转换,所以你必须注释它们并运行你的代码。