序列化和反序列化Entity Framework版本

时间:2016-02-06 19:02:31

标签: c# entity-framework serialization

我的db中的模型有版本,当我GET C#版本为byte[8]的对象时,但在Json中,对象似乎是一个字符串:AAAAAAAACXc=确切地说。

当我从我的js应用程序执行POST时,我的控制器接受动态c#对象,因为数据可以是任何派生类,我需要能够处理所有对象。

目前,我这样做是为了反序列化对象:

... Post([FromBody]dynamic data)
{
    var jsonObj = JsonConvert.DeserializeObject(data.ToString());

    //This line errors out
    CareTaker careTaker = JavaScriptSerializer().Deserialize<CareTaker>(jsonObj.ToString());
}

但是我收到了一个错误:

  

exceptionMessage:&#34;无法转换类型为&#39; System.String&#39;的对象输入&#39; System.Byte []&#39;&#34;

因为在CareTaker类中,Version属性定义为byte[],但json字符串显示为AAAAAAAACXc= ..

如何将此版本字符串转换为原始格式:[0 0 0 0 0 0 9 119]

谢谢。

我以为我会手动将此动态属性值覆盖为字节数组,因此请执行此路由。我已经尝试将字符串转换为普通字节数组,但它的长度似乎超过8,最终EF抛出验证错误,说它应该是字符串或长度为8的byte[]

1 个答案:

答案 0 :(得分:1)

你破坏了所有混合JsonConvert和JavaScriptSerializer。

首先,为什么不使用JToken而不是反序列化/序列化/反序列化?

var token = JToken.Parse(data.ToString());

通过这种方式,您可以拥有一个像集合这样的对象,您可以在其中访问成员并检查哪种类型。

然后你可以这样做

var deserObj = token.ToObject<theType>();

这也将纠正你遇到的byte []问题,因为Json.net会看到该属性是一个字节数组,而数据是一个base64字符串,它将负责转换数据。