2

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

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

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

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

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

甚至可能吗?

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

4

1 回答 1

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();
}
于 2012-04-11T16:03:46.593 回答