2

Noob WCF / RESTの質問はこちら!
単純なWebサービス(今のところ1つの方法)を構築する必要があります。私の好みは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 に答える