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中正确显示。
我访问了这里的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;
这将反序列化,但是你有两个特殊的字符属性,不会被转换,所以你必须注释它们并运行你的代码。