2012-04-11 14 views
2

Noob WCF/REST Frage hier!
Ich muss einen einfachen Web-Service erstellen (eine Methode für jetzt), meine Präferenz wäre für eine REST/JSON-Architektur, aber ich bin nicht sicher, dass dies in meinem Fall erreicht werden kann.Bedienen Sie ein komplexes Objekt mit einem Bild mit REST

Ich weiß, dass es einfach genug ist, komplexe Objekte in/aus JSON zu serialisieren/deserialisieren, während ein REST-basierter Dienst verwendet wird. Obwohl ich es noch nicht getestet habe, sieht es auch einfach für eine REST-based service to return an image aus.

Allerdings muss mein Szenario möglicherweise eine Mischung aus beiden bedienen. Im Folgenden finden Sie ein Beispiel für eine Objektdefinition, die zurückgegeben werden kann:

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

Ich weiß, ich das physische Bild zugänglich überall speichern könnte und dann einfach die URL als String zurückgeben, aber ich würde so viel den Aufwand zu vermeiden, mag als möglich.

Ist es überhaupt möglich?

Beachten Sie auch, dass ich nicht verpflichtet, REST oder JSON in irgendeiner Art und Weise bin, es ist einfach, dass alle coolen Kinder verwenden es so ...

Antwort

0

Wenn Sie das Bild als Teil des JSON-Objekt möchten, wandeln Sie es in einen serialisierbaren Typ um. Der einfachste Weg ist, nur seine Byte-Darstellung zu verwenden.

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; 

EDIT: Da die OP gefunden, gibt einen viel einfacheren/schnellen Weg ist, zu schreiben:

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(); 
} 
+0

Ich bin mir nicht sicher, warum denken Sie, dass Link beantwortet meine Frage, die ist, wie man ein komplexes Objekt zurückgibt, von dem ein Attribut ein Bild ist und der Rest Strings sind. In diesem Beispiel geht es einfach darum, ein Bild zurückzuschieben. – BlazingFrog

+0

Ich versuche herauszufinden, ob es möglich ist, ein Objekt mit 3 Attributen (2 Strings und ein Bild) mit REST und JSON zurückzugeben. Bitte sehen Sie meine ursprüngliche Frage. – BlazingFrog

+0

@BlazingFrog Antwort wurde aktualisiert. –

Verwandte Themen