Передача динамического объекта JSON в Web API-пример Newtonsoft

мне нужно передать динамический объект JSON моему контроллеру веб-API, чтобы я мог обработать его в зависимости от типа. Я пробовал использовать JSON.NET пример Это можно увидеть здесь но когда я использую Fiddler, я вижу, что переданный в JObect всегда равен null.

Это упражнение из примера, вставленного в Fiddler:

POST http://localhost:9185/api/Auto/PostSavePage/  HTTP/1.1
User-Agent: Fiddler
Content-type: application/json
Host: localhost
Content-Length: 88

{AlbumName: "Dirty Deeds",Songs:[ { SongName: "Problem Child"},{ SongName:  
"Squealer"}]}

Ans вот мой очень простой метод контроллера веб-API:

 [HttpPost]
 public JObject PostSavePage(JObject jObject)
 {        
     dynamic testObject = jObject;         
     // other stuff here
 }

Я новичок в этом и у меня есть пара вопросов по этой области:

Я делаю что-то не так в этом конкретном примере?

возможно, что более важно, есть ли лучший способ передать динамический объект JSON (из сообщения JavaScript AJAX)?

2 ответов


согласно комментарию восприятия ваш JSON не выглядит действительным. Прогоните его через JSONLint а также вы получаете:

Parse error on line 1:
{    AlbumName: "Dirty De
-----^
Expecting 'STRING', '}'

измените его на " вокруг имен полей:

{
    "AlbumName": "Dirty Deeds",
    "Songs": [
        {
            "SongName": "Problem Child"
        },
        {
            "SongName": "Squealer"
        }
    ]
}

также вы пытались поменять свой JObject на Jtoken или динамический объект (например,здесь)?

[HttpPost]
 public JObject PostSavePage(JToken testObject)
 {                
     // other stuff here
 }

или

 [HttpPost]
 public JObject PostSavePage(dynamic testObject)
 {                
     // other stuff here
 }

спасибо всем, кто здесь помог. К сожалению, я так и не докопался до сути.

я портировал проект по частям в новый проект и он работает нормально.

для информации у меня есть класс RouteConfig, который на данный момент довольно прост:

public class RouteConfig
{       
    private static string ControllerAction = "ApiControllerAction";

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: ControllerAction,
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

мой вызов в API теперь использует JSON.Преобразовать в строки:

$.ajax("http://localhost:54997/api/values/PostSavePage/", {
    data:  JSON.stringify(jObject),                               
    contentType: 'application/json',
    type: 'POST'
});

оригинальное действие API работает.

обратите внимание, что я только играл с этим на данный момент так код не лучший, но я подумал, что он может быть полезен в базовой форме, если у кого-то еще есть аналогичная проблема.