C# Rest API возвращает динамический объект

У меня есть веб-сервис

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;}

Один из моих webMethods должен возвращать динамический объект

WebMethod:

Решение 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;

}

Решение 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;
}

Оба не работают. Ответ ERR_CONNECTION_RESET

Есть идеи как это реализовать? Спасибо за помощь.

2 ответа

Вы не возвращаете строку JSON. Добавьте следующее к вашим потребностям:

using System.Web.Script.Serialization;

и следующее в вашем теле

return new JavaScriptSerializer().Serialize(obj);

измените тип возврата на string вместо object

Вы можете привести ответ "HttpResponseMessage" или просто отправить объект модели в метод создания ответа.

[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");
   }
}
Другие вопросы по тегам