使用web api:不起作用

时间:2013-09-28 16:07:36

标签: json asp.net-mvc-4 asp.net-web-api

有人可以帮助我,我正在尝试返回一个类别列表,但是它会变为空。有谁知道为什么?

Controller WEB:

    public ActionResult MontaEstruturaCategoria()
    {
        ViewBag.Estilo = "none";

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(ConfigurationManager.AppSettings["UrlAPI"]);
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var id = Session["UserId"];

        var url = "api/categoria/" + id;

        HttpResponseMessage response = client.GetAsync(url).Result;

        if (response.IsSuccessStatusCode)
        {
            var categoria = response.Content.ReadAsAsync<IEnumerable<Categoria>>().Result;

            return PartialView("ListaCategoria", categoria);
        }
        else
        {
            string msg = response.IsSuccessStatusCode.ToString();
            throw new Exception(msg);
        }
    }

但这一行正在回归:

var categoria = response.Content.ReadAsAsync&gt;()。结果;

       [0] = [ControleFinanceiro.Models.Categoria]
       [1] = null
       [2] = null
       [3] = null
       [4] = null
       [5] = null
       [6] = null
       [7] = null
       [8] = null
       [9] = null
       [10] = null

JSON RETURN WEB API:

        [{"$id":"1","intCategoriaId":2,"strCategoriaNome":"Receitas","intCategoriaPaiId":0,"intCategoriaOrdem":2,"intUsuarioId":1,"Usuario":{"$id":"2","intUsuarioId":1,"strUsuarioNome":"Jose Henrique Borges da Costa Filho","strUsuarioEmail":"jose.costa@unidax.com.br","strUsuarioSenha":"1","Categoria":[{"$ref":"1"},{"$id":"3","intCategoriaId":3,"strCategoriaNome":"Salario","intCategoriaPaiId":0,"intCategoriaOrdem":1,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"4","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"3"}]}},{"$id":"5","intCategoriaId":4,"strCategoriaNome":"UNIDAX","intCategoriaPaiId":0,"intCategoriaOrdem":3,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"6","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"4"}]}},{"$id":"7","intCategoriaId":8,"strCategoriaNome":"Freela","intCategoriaPaiId":4,"intCategoriaOrdem":1,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"8","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"8"}]}},{"$id":"9","intCategoriaId":9,"strCategoriaNome":"Vendas","intCategoriaPaiId":2,"intCategoriaOrdem":1,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"10","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"9"}]}},{"$id":"11","intCategoriaId":14,"strCategoriaNome":"Pessoal","intCategoriaPaiId":4,"intCategoriaOrdem":3,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"12","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"14"}]}},{"$id":"13","intCategoriaId":15,"strCategoriaNome":"Academia","intCategoriaPaiId":18,"intCategoriaOrdem":1,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"14","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"15"}]}},{"$id":"15","intCategoriaId":16,"strCategoriaNome":"SwissPark","intCategoriaPaiId":4,"intCategoriaOrdem":2,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"16","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"16"}]}},{"$id":"17","intCategoriaId":17,"strCategoriaNome":"Supermercado","intCategoriaPaiId":14,"intCategoriaOrdem":1,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"18","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"17"}]}},{"$id":"19","intCategoriaId":18,"strCategoriaNome":"Carro","intCategoriaPaiId":17,"intCategoriaOrdem":1,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"20","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"18"}]}},{"$id":"21","intCategoriaId":19,"strCategoriaNome":"Teste","intCategoriaPaiId":15,"intCategoriaOrdem":1,"intUsuarioId":1,"Usuario":{"$ref":"2"},"EntityKey":{"$id":"22","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"19"}]}}],"Contato":[{"$id":"23","intContatoId":6,"strContatoNome":"Danielle Ramos Tonhai","strContatoCelular":"(19) 98765-8790","strContatoFixo":"(19) 3245-7869","strContatoEmail":"danielle.ramos@undiax.com.br","strContatoEndereco":"Rua Santos","strContatoComplemento":"casa","strContatoBairro":"Jardim Londres","strContatoCidade":"Campinas","strUFId":"SP","strContatoCEP":"13098-098","intUsuarioId":1,"UF":{"$id":"24","strUFId":"SP","strUFNome":"São Paulo","Contato":[{"$ref":"23"}],"EntityKey":{"$id":"25","EntitySetName":"UF","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"strUFId","Type":"System.String","Value":"SP"}]}},"Usuario":{"$ref":"2"},"EntityKey":{"$id":"26","EntitySetName":"Contato","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intContatoId","Type":"System.Int32","Value":"6"}]}}],"EntityKey":{"$id":"27","EntitySetName":"Usuario","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intUsuarioId","Type":"System.Int32","Value":"1"}]}},"EntityKey":{"$id":"28","EntitySetName":"Categoria","EntityContainerName":"DatabaseContext","EntityKeyValues":[{"Key":"intCategoriaId","Type":"System.Int32","Value":"2"}]}},{"$ref":"3"},{"$ref":"5"},{"$ref":"7"},{"$ref":"9"},{"$ref":"11"},{"$ref":"13"},{"$ref":"15"},{"$ref":"17"},{"$ref":"19"},{"$ref":"21"}]

1 个答案:

答案 0 :(得分:0)

在你发布的JSON中......它是一个包含一个元素的数组。如果您使用Newtonsoft反序列化对象,您最终可能会得到如下内容:

var client = new WebClient();
var firstElement = JArray.Parse(client.DownloadString(url))[0];
var categories = firstElement.Usuario.Categoria;

我认为这样可行。你必须向下钻取一下以获得类别列表。