在WebApi中将JSON反序列化为字节数组

时间:2015-12-11 22:12:52

标签: c# serialization asp.net-web-api

我是Web API的新手,我遇到了以下类的反序列化问题:

public class User
{
    public virtual int ID { get; set; }
    public virtual string Username { get; set; }
    public virtual string Firstname { get; set; }
    public virtual string Lastname { get; set; }
    public virtual byte[] RowVersion { get; set; }
}

当我的UserController将对象序列化为JSON并将其发回时,它在Fiddler中看起来像这样:

{Username: "Foo", Firstname: Foo, Lastname: Bar,  RowVersion: "AAAAAAAAJxc=", Id: 8}

当客户端发送PUT时,Fiddler中的RowVersion是相同的,但在我的UserController的Put-method中是错误的。对象的RowVersion属性只有1个条目字节1 = 0而不是byte [8]。

enter image description here

实际上,在不同的RowVersion中,如果我尝试更新对象(DBConcurrencyException),实体框架会抛出异常。

因此,当Web API反序列化传入的JSON以创建对象时,必定会出现错误...我在哪里可以解决我的问题?

提前谢谢!

修改解决方案

我找到了解决方案:

而不是

public IHttpActionResult Put(User usr)
{
    return Ok();
}

我已将其更改为:

public IHttpActionResult Put([FromBody]JToken jsonbody)
{
    var usr = JsonConvert.DeserializeObject<User>(jsonbody.Root.ToString());
    return Ok();

}

现在byte [](RowVersion)是正确的。我不知道它为什么会这样运作,但这也可以帮助人们。

0 个答案:

没有答案