Noob WCF / REST问题在这里!
我需要构建一个简单的Web服务(现在是一种方法),我的偏好是REST / JSON类型的体系结构,但我不确定这可以在我的情况下实现。
我知道在使用基于REST的服务时,将复杂对象序列化/反序列化为JSON很容易。虽然我还没有测试过它,但REST-based service to return an image看起来也很容易。
但是,我的情景可能需要兼顾两者。下面是可以返回的对象定义的示例:
class Response
{
string myTitle;
string myDate;
Object myImage;
}
我意识到我可以将物理图像存储在任何可访问的位置,然后只需将URL作为字符串返回,但我希望尽可能避免开销。
甚至可能吗?
另请注意,我并没有以任何方式致力于REST或JSON,只是所有酷孩子都在使用它......
答案 0 :(得分:0)
如果您希望图像作为JSON对象的一部分,请将其转换为可序列化类型。最简单的方法就是使用它的字节表示。
System.Drawing.Image img = System.Drawing.Image.FromFile("filename");
byte[] imgContent;
using (System.IO.MemoryStream m = new System.IO.MemoryStream())
{
img.Save(m, img.RawFormat);
imgContent = new byte[m.Length];
const int count = 4096;
byte[] buffer = new byte[4096];
for (int i = 0; i < m.Length; i += count)
{
m.Read(buffer, i, (m.Length - i < count ? (int)(m.Length - i) : count));
buffer.CopyTo(imgContent, i);
}
}
myResponse.myImage = imgContent;
编辑:正如OP发现的那样,有一种更简单/更快捷的写作方式:
System.Drawing.Image img = System.Drawing.Image.FromFile("filename");
using (System.IO.MemoryStream m = new System.IO.MemoryStream())
{
img.Save(m, img.RawFormat);
myResponse.myImage = m.ToArray();
}