您好我正在尝试从授权属性中的HttpPost方法调用反序列化一个Object。我正在使用ASP.NET Web Api Framework。
这是我的代码:
public override void OnAuthorization(HttpActionContext actionContext)
{
var rezult = DeserializeStream<EvaluationFormDataContract>(actionContext.Request.Content.ReadAsStreamAsync().Result);
}
private T DeserializeStream<T>(Stream stream)
{
var binaryFormatter = new BinaryFormatter();
var rez = binaryFormatter.Deserialize(stream);
var t = (T)binaryFormatter.Deserialize(stream);
return t;
}
当执行此代码时,当binaryFormatter尝试反序列化时,我得到此异常:
输入流不是有效的二进制格式。起始内容(以字节为单位)为:73-74-75-64-65-6E-74-41-73-73-69-67-6E-6D-65-6E-74 ...
我做错了什么?
答案 0 :(得分:2)
您正在尝试使用BinaryFormatter
二进制反序列化非二进制序列化的数据。根据您发送的数据,我看到十六进制代码代表一个字符串。
73-74-75-64-65-6E-74-41-73-73-69-67-6E-6D-65-6E-74
为studentAssignment
这让我相信你正在做一个简单的AJAX调用并将JSON数据发送到WebAPI服务。
您需要使用JSON反序列化流。
var json = actionContext.Request.Content.ReadAsStringAsync().Result;
var m = JsonConvert.DeserializeObject<EvaluationFormDataContract>(json);
如果响应不是JSON,而是表单数据,则可以像查询字符串一样对其进行解析。
var stringData = actionContext.Request.Content.ReadAsStringAsync().Result;
NameValueCollection data = HttpUtility.ParseQueryString(stringData);
string personId = data["personId"];