JSON是字符串的对象-但我需要JSON的最后一个成员是字节数组
本文关键字:JSON 最后一个 成员 字节数 数组 字节 字符串 对象 | 更新日期: 2023-09-27 18:12:12
我有一个web服务,它"监听"发送JSON数据的HTTP POST请求-这里是方法的开始:
// POST api/blah
[HttpPost]
public HttpResponseMessage PostPicture(HttpRequestMessage msg)
{
string data = msg.Content.ReadAsStringAsync().Result;
...
变量"data"包含原始JSON,本质上,它只是一个格式化为JSON的字符串。下面是变量"data":
{
"longitude" : 96.84610000000001,
"latitude" : 35.5608,
"username" : "mgallow",
"imageDataBlob" : "'/9j'/4UI5RXhpZgAASUkqAAg..... and so on
}
最后,我将这些数据并将其插入数据库-经度和纬度类型为十进制,用户名类型为nvarchar(50), imageDataBlob类型为varbinary(MAX)。下面的代码,在相同的方法中,获取JSON数据并将其反序列化为"Picture"类型的对象,这是数据库中表示我的表的对象:
[HttpPost]
public HttpResponseMessage PostPicture(HttpRequestMessage msg)
{
string data = msg.Content.ReadAsStringAsync().Result;
Picture obj = Activator.CreateInstance<Picture>();
using (MemoryStream stream1 = new MemoryStream(Encoding.Unicode.GetBytes(data)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
obj = (Picture)serializer.ReadObject(stream1);
}
...
但是我得到的错误,我明白为什么我得到它,是:
反序列化类型的对象出错blah.Models.Picture。从名称空间结束元素'imageDataBlob'"预期。找到文本'/'.
研究表明,这是因为它期待一个varbinary,而不是得到一个字符串(从JSON)。作为测试的一部分,我将表中的数据类型更改为nvarchar(MAX),并且不再出现该错误。
我的问题是
我怎么能把JSON通过一个字符串,并得到它正确映射到我的对象,这是字符串,小数和字节[]的混合?
您的imageDataBlob
字段似乎是base64编码的。在Picture
类中声明它为字符串,然后使用Convert.FromBase64String
看看base64编码-这应该会给你一些想法…
我建议您在形成JSON之前对数据进行Base64编码。同样,您可以在将数据更新到数据库之前在服务器端解码数据。