序列化和反序列化实体框架版本
本文关键字:框架 版本 实体 反序列化 序列化 | 更新日期: 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 字符串,它将负责转换数据。