序列化和反序列化实体框架版本

本文关键字:框架 版本 实体 反序列化 序列化 | 更新日期: 2023-09-27 18:33:34

我的数据库中有一个具有版本的模型,当我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: "无法将类型为'System.String'的对象转换为类型'System.Byte[]'">

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

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

谢谢。

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

序列化和反序列化实体框架版本

你打破了所有混合 JsonConvert 和 JavaScriptSerializer 的方法。

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

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

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

这样你就可以做到

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

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