反序列化HTTP POST内的对象(Deserializing the object inside

2019-10-19 10:25发布

你好我想从里面授权我attribute.I使用的ASP.NET Web API框架一个HttpPost方法调用反序列化对象。

这里是我的代码:

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 tryes反序列化它:

输入流是不是一个有效的二进制格式。 起始内容(以字节计)为:73-74-75-64-65-6E-74-41-73-73-69-67-6E-6D-65-6E-74 ...

我究竟做错了什么?

Answer 1:

您正在尝试使用BinaryFormatter到这是不是二进制序列化二进制反序列化的数据。 从数据你送我看到的十六进制代码表示的字符串。

73-74-75-64-65-6E-74-41-73-73-69-67-6E-6D-65-6E-74解码是studentAssignment

这使我相信,你正在做一个简单的AJAX调用和发送JSON数据的WebAPI服务。

你需要反序列化使用JSON流。

  1. 读取请求的内容作为字符串
  2. 如果内容是JSON,使用JSON.NET反序列化

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"];


文章来源: Deserializing the object inside an http post