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通过一个字符串,并得到它正确映射到我的对象,这是字符串,小数和字节[]的混合?

JSON是字符串的对象-但我需要JSON的最后一个成员是字节数组

您的imageDataBlob字段似乎是base64编码的。在Picture类中声明它为字符串,然后使用Convert.FromBase64String

看看base64编码-这应该会给你一些想法…

我建议您在形成JSON之前对数据进行Base64编码。同样,您可以在将数据更新到数据库之前在服务器端解码数据。