2016-03-22 9 views
4

Ich habe eine WebserviceC# REST-API Rückkehr dynamisches Objekt

WebServiceHost webServiceHost= new WebServiceHost(typeof(WebMethods), new Uri(url)); 
webServiceHost.Open(); 

public class Fish { public string name = "I am a fish"; } 
public class Dog { public int legs = 4; } 
public class Cat { public DateTime dt = DateTime.Now;} 

Einer meiner webMethods sollte ein dynamisches Objekt

WebMethod zurück:

Lösung 1

[OperationBehavior] 
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "/isTest?class={cl}")] 
object isTest(string cl) 
{ 
    object obj; 

    switch (cl) 
    { 
     case "fish": 
      obj= new Fish(); 
      break; 
     case "dog": 
      obj= new Dog(); 
      break; 
     default: 
      obj= new Cat(); 
      break; 

    } 
    return obj; 

} 

Lösung 2

[OperationBehavior] 
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "/isTest?class={cl}")] 
dynamic isTest(string cl) 
{ 
    dynamic obj; 

    switch (cl) 
    { 
     case "fish": 
      obj= new Fish(); 
      break; 
     case "dog": 
      obj= new Dog(); 
      break; 
     default: 
      obj= new Cat(); 
      break; 

    } 
    return obj; 
} 

Beide funktionieren nicht. Die Antwort ist ERR_CONNECTION_RESET

Irgendeine Idee, wie man es verwirklicht? Danke für Hilfe.

+0

Legen Sie einen Haltepunkt für 'return obj' fest. Wird das entsprechende Objekt zurückgegeben? – Eminem

+0

Ja das entsprechende Objekt wird zurückgegeben! –

+1

Geben Sie die vollständige URL (http: // localhost: 8323/somewebservice/isTest? Class = fish) in einen Webbrowser ein und geben Sie die vollständige Fehlermeldung an. Wenn Sie IE verwenden, drücken Sie F11 (denke ich) und beobachten Sie Ihre Netzwerkantworten – Eminem

Antwort

0

Sie geben keine JSON-Zeichenfolge zurück. Fügen Sie den folgenden zu Ihrer uses:

using System.Web.Script.Serialization; 

und die folgenden in Ihrem Körper

return new JavaScriptSerializer().Serialize(obj); 

Änderung Ihrer Rückkehr Typ string statt object

+1

OP hat bereits 'ResponseFormat = WebMessageFormat.Json' verwendet. Es wird erwartet, dass die WCF die Übersetzung durchführt. – davidshen84

+1

Ich muss ein Objekt zurückgeben. Die Rückgabe einer Zeichenfolge ist keine mögliche Lösung. –

0

Sie werfen die "HttpResponseMessage" Antwort oder Sie können das Modellobjekt nur in create response method senden.

[WebGet(UriTemplate = "{id}")] 
public HttpResponseMessage isTest(int id) 
{ 
    Model model = Model.table.Where(p => p.Id == id).FirstOrDefault(); 
    if (model != null) 
    { 
     //return Request.CreateResponse<Model>(HttpStatusCode.OK, model); 
     //or 
     return Request.CreateResponse(HttpStatusCode.OK, model); 
    } 
    else 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Model Not Found"); 
    } 
}