【问题标题】:Global Json Formatting not working全局 Json 格式不起作用
【发布时间】:2014-12-09 16:58:26
【问题描述】:

我的 json 格式有问题。我希望我的 json 结果是驼峰式的。我使用以下代码来实现这一点(ASP.NET WebAPI Tip #3: camelCasing JSON):

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var formatters = config.Formatters;
        var jsonFormatter = formatters.JsonFormatter;
        var settings = jsonFormatter.SerializerSettings;
        settings.Formatting = Newtonsoft.Json.Formatting.Indented;
        settings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
    }
}

Register 方法是从Global.asax 调用的:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        // Load all modules
        ESP.Framework.Web.ModuleManager.Singleton.LoadModules(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath);

        // Virtual Path Provider
        // // System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(new Provider.ESPPathProvider());

        // Register Controller-Factory
        //ControllerBuilder.Current.SetControllerFactory(typeof(ESP.Web.Controllers.DynamicActionControllerFactory));

        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
    }
}

但是当我在浏览器中调用以下方法时:

[HttpGet]
public JsonResult GetUser()
{
    var user = ESP.Framework.Web.Security.UserManager.GetAllUser();

    return Json(user, JsonRequestBehavior.AllowGet);
}

结果不是驼峰式(方法所在的程序集是动态加载的)。

也许有人有解决方案。谢谢!

【问题讨论】:

  • 我不确定您更改的设置是否会影响 MVC,它们适用于 Web API。您是否尝试过创建 Web API 控制器?
  • 您的其他设置是否受到尊重,例如settings.Formatting = Newtonsoft.Json.Formatting.Indented 是否有效?
  • 不行,settings.Formatting = Newtonsoft.Json.Formatting.Indented 也不起作用。

标签: c# asp.net-mvc json camelcasing


【解决方案1】:

我认为你是混合了mvc网站和WebApi,在asp.net当前版本中,它们使用不同的api。您设置 WebApi 配置,但使用 Mvc 网站的 api。您应该使用 WebApi 版本:

using System.Web.Http;

public class UserController : ApiController
{
    [Route("user/getalluser")]
    public IEnumerable<User> Get()
    {
        return GetAllUser();
    }
}

然后你可以访问 url 'user/getalluser' 来获取 json 数据

【讨论】:

  • 好的,路由之前有效,但我明白你的意思,现在一切正常!谢谢!
【解决方案2】:

好的,我找到了解决办法:

public string SerializeObject(object toSerialize)
{
    var settings = new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(), Formatting = Formatting.Indented };
    return JsonConvert.SerializeObject(toSerialize, Formatting.None, settings);
}

[HttpGet]
public string GetUser()
{
    var user = Simplic.Framework.Web.Security.UserManager.GetAllUser();
    return SerializeObject(user);
}

但不是很好...

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多