C# 如何在不使用客户端JSON.Parse进行HTTP响应的情况下使用JsonConvert.SerializeObject和JsonResult
当我有一个直接的对象时,我可以使用ASP.NET MVC控制器进行序列化,如下所示:C# 如何在不使用客户端JSON.Parse进行HTTP响应的情况下使用JsonConvert.SerializeObject和JsonResult,c#,asp.net,json,asp.net-mvc,C#,Asp.net,Json,Asp.net Mvc,当我有一个直接的对象时,我可以使用ASP.NET MVC控制器进行序列化,如下所示: public JsonResult Program(int id, int userId) { return Json(GetPrograms(userId).FirstOrDefault(f => f.Id == id), JsonRequestBehavior.AllowGet); } 客户端,我的响应是一个Javascript对象: 现在,我希望我的响应JSON具有如下CamelCase
public JsonResult Program(int id, int userId)
{
return Json(GetPrograms(userId).FirstOrDefault(f => f.Id == id), JsonRequestBehavior.AllowGet);
}
客户端,我的响应是一个Javascript对象:
现在,我希望我的响应JSON具有如下CamelCase属性名称:
因此,使用JSON.NET,我将以下代码添加到我的ASP.NET MVC控制器:
var serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
var json = JsonConvert.SerializeObject(program, serializerSettings);
问题是,JsonConvert.SerializeObject
返回一个JSON字符串,因此在这里用作JsonResult时:
public JsonResult Program(int id, int userId)
{
var serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
var json = JsonConvert.SerializeObject(program, serializerSettings);
return Json(json, JsonRequestBehavior.AllowGet);
}
这与问题返回中的第一段代码不同,它实际上不是一个JsonResult。这是一个字符串响应,我必须使用JavascriptJSON.parse
,Web客户端调用控制器并处理响应
是否有任何方法可以简化我的属性并序列化JSON对象JsonResult?
我试过JObject:
var serializer = new JsonSerializer()
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
JObject.FromObject(obj, serializer);
但这根本不起作用my JsonResult是一堆空数组:
这将起作用
public object Program(int id, int userId)
{
var serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new
CamelCasePropertyNamesContractResolver();
var json = JsonConvert.SerializeObject(program, serializerSettings);
return json;
}
这里有一个答案:。重要的部分是创建您自己的
JsonResult
的链接,但您始终需要在客户端使用JSON.parse
将JSON字符串转换为JavaScript对象。有时候,像jQuery这样的库对您隐藏了这一步骤,但这种情况确实发生了。@GabrielLuci-hmm也许,我不是在使用jQuery,而是在使用Javascriptfetch@GabrielLuci你一定是弄错了,因为我使用相同的客户端Javascript调用我的控制器端点,当使用JsonConvert.SerializeObject时,它是一个JSON字符串,而不仅仅是当使用JSON(obj)包含(直接或作为链接)几乎所有通过自定义序列化返回JSON的合理方法时。看起来这正是您要寻找的,问题的第二部分(关于JSON.parse
)是由于双重转换(对象到JSON字符串到带字符串的JSON)导致的,当实际返回原始对象的JSON时,这种转换应该消失。这确实有效,尽管我不确定这是否理想,仍然返回一个JsonResult会很好,因为它符合许多ASP.NET MVC应用程序中看到的ASP.NET MVC通用模式。我不认为使用JsonResult类有什么特殊的区别或性能优势,除非它将ContentType设置为application/json(如果尚未设置)。它还使用javascript序列化程序序列化数据(比json转换器快吗?),并将序列化数据写入响应流。不,我不反对,只是JsonResult的模式始终是最理想的返回类型。我非常感谢您的回答,并对其投了赞成票