我的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[]
。
答案 0 :(得分:1)
你破坏了所有混合JsonConvert和JavaScriptSerializer。
首先,为什么不使用JToken而不是反序列化/序列化/反序列化?
var token = JToken.Parse(data.ToString());
通过这种方式,您可以拥有一个像集合这样的对象,您可以在其中访问成员并检查哪种类型。
然后你可以这样做
var deserObj = token.ToObject<theType>();
这也将纠正你遇到的byte []问题,因为Json.net会看到该属性是一个字节数组,而数据是一个base64字符串,它将负责转换数据。