使用 REST 为复杂对象提供图像

本文关键字:图像 对象 复杂 REST 使用 | 更新日期: 2023-09-27 18:30:41

菜鸟WCF/REST问题在这里!
我需要构建一个简单的 Web 服务(目前一种方法),我更喜欢 REST/JSON 类型的架构,但我不确定这在我的情况下是否可以实现。

我知道在使用基于 REST 的服务时,将复杂对象序列化/反序列化为 JSON 或从 JSON 中序列化/反序列化很容易。尽管我还没有测试过它,但对于基于 REST 的服务来说,返回图像看起来也很容易。

但是,我的方案可能需要同时提供两者。下面是可以返回的对象定义示例:

class Response
{
  string myTitle;
  string myDate;
  Object myImage; 
}

我意识到我可以将物理图像存储在任何可访问的地方,然后简单地将 URL 作为字符串返回,但我想尽可能避免开销。

甚至可能吗?

另请注意,我并没有以任何方式致力于 REST 或 JSON,只是所有很酷的孩子都在使用它......

使用 REST 为复杂对象提供图像

如果您希望图像作为 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();
}