Przekazywanie kolekcji obiektu poprzez Web API

Odpowiedz Nowy wątek
2015-09-16 13:33
0

Hej.

Nie wiem czy to pytanie sie powtarza czy nie.

Mam problem i utknołem.

Mam Web Api controller w którym chce mieć dwie metody

Get();
Get(id);


public class ValuesController : ApiController
    {

        private NORTHWNDEntities _entites = new NORTHWNDEntities();

        //// GET api/values
        //public IEnumerable<Product> Get()
        //{
        //    var getProductsList = _entites.Products.ToList();
        //    return getProductsList;
        //}

        // GET api/values
        //public JsonResult Get()
        //{
        //    var getProductsList = _entites.Products.ToList();

        //    JsonSerializer _serializer = new JsonSerializer();
        //    var serialize = _serializer.Serialize(getProductsList);
        //    return Json(getProductsList);
        //}

        //// GET api/values/5
        //public string Get(int id)
        //{
        //    var getProductsListByID = _entites.Products.ToList().Where(n=>n.ProductID == id);
        //    JsonSerializer _serializer = new JsonSerializer();
        //    var serialize = _serializer.Serialize(getProductsListByID);
        //    return getProductsListByID.ToString();
        //}

    }

Staram się metodą Get() pobrac wszystkie obiektu z tabeli Product.

Czyli pobieram:


var getProductsList = _entites.Products.ToList();

Działa fajnie, pobiera wszystkie produkty ( to jest kolekcja Products )

Chciałbym teraz aby ta metoda Get() wpakowała te produkty do obiektu JSON i zeby można było tą kolekcje obiektów pobrać później po stronie przeglądarki ( np poprzez Angulara )

Ogolnie problem jest taki, że.... nie wiem w sumie jak tą liste przekonwertować


Error   2   Cannot implicitly convert type 'System.Web.Http.Results.JsonResult<System.Collections.Generic.List<AdamAPI.Models.Product>>' to 'System.Web.Mvc.JsonResult' \AdamAPI\Controllers\ValuesController.cs    34  20  AdamAPI

Bardzo proszę o pomoc.


ten błąd pochodzi z której wersji tej funkcji? - Sarrus 2015-09-16 14:12

Pozostało 580 znaków

2015-09-16 14:38
0

Z metody WebAPI wystarczy zwrócić kolekcję (List<x>), to czy dane wyjdą jako JSON, XML czy sałatka warzywna zależy od tego jakie będą nagłówki i typ requestu, a nie od implementacji metody.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2015-09-16 14:38

Pozostało 580 znaków

2015-09-16 15:08
0

Aha czyli moja metoda Get() wystarczy że zwróci mi List<products> ?

Nie pakować tego do JSONa?


Pozostało 580 znaków

2015-09-16 15:22
0

Ok więc mam dwie metody zmodyfikowane:


        //GET api/values
        public List<Product> Get()
        {
            var getProductsList = _entites.Products.ToList();
            return getProductsList;
        }

        // GET api/values/5
        public Product Get(int id)
        {
            var getProductsListByID = _entites.Products.ToList().Find(p => p.ProductID == id);
            return getProductsListByID;
        }

Teraz otrzymuje kolejny dziwny problem...

5f31c067fb.png

Co to może być? :(


Pozostało 580 znaków

2015-09-16 15:40
0

Okej dobra już tego błedu nie ma. Natomiast teraz tak:

Gdy chce wywołać te metody z poziomu przeglądarki
http://localhost:53337/api/values/
http://localhost:53337/api/values/1

Otrzymuje jakiś błąd z serializacją:

The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.

Pozostało 580 znaków

2015-09-16 20:44

Dobra rozwiązałem problemy.

Wystarczyło do metod Web API dodać:


// disable proxy creation
            _entites.Configuration.ProxyCreationEnabled = false;

Aby wyłączyć tworzenie PROXY.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0