オブジェクト型の C# プロパティへの文字列値の JSON 逆シリアル化に問題があり、文字列の配列になってしまいます。
foo.Bar
Get および Post メソッドの の値は ですがstring[1]{"test"}
、 string を期待しています"test"
。
Foo にDataContract
/ DataMember
、およびJsonObject
/JsonProperty
属性を付けてみましたが、同じ結果が得られました。
なぜこれが起こっているのですか?
これは、空の Asp.net MVC3 プロジェクトからの私のコードです。Microsoft.AspNet.WebApi RC nuget パッケージ バージョン 4.0.20505.0 と jquery v 1.7.2 をインストールしました
Get アクションと contentType: "application/json" を含めるように更新されたコードを更新します。
Global.asax
using System;
using System.Collections.Generic;
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "WebApi",
routeTemplate: "api/{controller}"
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
私のテストコントローラー
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WebApiRCTest.Controllers
{
public class TestController : System.Web.Http.ApiController
{
public IEnumerable<string> Get([System.Web.Http.FromUri]Foo foo)
{
return new List<string>();
}
public void Post([System.Web.Http.FromBody]Foo foo)
{
object bar = foo.Bar;
}
}
public class Foo
{
public object Bar { get; set; }
}
}
マイ JavaScript
function post() {
$.ajax({
url: "http://localhost:55700/api/ApiTest/",
type: "GET",
dataType: "json",
accept: "application/json",
contentType: "application/json",
data: { Bar: "test" }
})
$.ajax({
url: "http://localhost:55700/api/Test/",
type: "POST",
dataType: "json",
accept: "application/json",
contentType: "application/json",
data: { Bar: "test" }
})
}