我有一个 Web 服务,可以“侦听”发送 JSON 数据的 HTTP POST 请求 - 这是执行此操作的方法的开始:
// POST api/blah
[HttpPost]
public HttpResponseMessage PostPicture(HttpRequestMessage msg)
{
string data = msg.Content.ReadAsStringAsync().Result;
...
变量“data”包含原始 JSON,本质上,它只是一个格式化为 JSON 的字符串。这是变量“数据”:
{
"longitude" : 96.84610000000001,
"latitude" : 35.5608,
"username" : "mgallow",
"imageDataBlob" : "\/9j\/4UI5RXhpZgAASUkqAAg..... and so on
}
最后,我将这些数据插入到数据库中——经度和纬度是十进制类型,用户名是 nvarchar(50) 类型,imageDataBlob 是 varbinary(MAX) 类型。下面的代码以相同的方法获取 JSON 数据并将其反序列化为“图片”类型的对象,该对象代表我在数据库中的表:
[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,并将其正确映射到我的对象,该对象是字符串、十进制和字节 [] 的混合体?