我们有一些执行ajax调用的旧式js代码,并期望将这些属性命名为Id,Name等。默认情况下,Asp.Net Core骆驼中的json序列化程序会使用返回的实体的属性,但是我怎么知道使用相同的大小写和C#代码?
最好我要为每个控制器设置此值。
答案 0 :(得分:2)
ASP.NET Core使用Newtonsoft进行序列化,因此它应该像添加
一样简单。 JsonProperty
属性归所有属性。
例如
public class ViewModel
{
[JsonProperty("Id")]
public string Id { get; set; }
[JsonProperty("Name")]
public string Name { get; set; }
}
您还可以通过在
中添加.AddJsonOptions()来在Startup.cs类中设置各种选项。ConfigureServices(IServiceCollection services)
方法。
答案 1 :(得分:2)
我们的解决方案是一个托管在Sharepoint上的Angular应用程序,它使用了Sharepoint的Web服务,因此只想将其提升并转移到Asp.Net Core上,看看它是否有效。
我最终这样做:
JsonSerializerSettings _serializerSettings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Auto
};
[Route("_api/Web/CurrentUser")]
public IActionResult CurrentUser()
{
return Json(new
{
d = new
{
Id = 123,
Title = "MyTitle",
LoginName = "MyLoginName",
NameId = "MyNameId"
}
}, _serializerSettings);
}
这将返回匿名类型中的大小写。
答案 2 :(得分:1)
要为每个控制器进行设置,您可以尝试IResultFilter
或传递JsonSerializerSettings
。
对于如下所示的控制器:
public async Task<ActionResult> Test()
{
return Ok(new Product { Id = 1, Name = "test" });
}
Options1
public async Task<ActionResult> Test()
{
return new JsonResult(new Product { Id = 1, Name = "tt" },new Newtonsoft.Json.JsonSerializerSettings { ContractResolver = new DefaultContractResolver() });
}
Options2
自定义IResultFilter
public class JsonSerializeFilter : IResultFilter
{
public void OnResultExecuted(ResultExecutedContext context)
{
}
public void OnResultExecuting(ResultExecutingContext context)
{
var result = context.Result as ObjectResult;
var value = JsonConvert.SerializeObject(result.Value);
context.Result = new ObjectResult(JsonConvert.SerializeObject(
result.Value,
new JsonSerializerSettings { ContractResolver = new DefaultContractResolver() }
));
}
}
使用JsonSerializeFilter
[TypeFilter(typeof(JsonSerializeFilter))]
public async Task<ActionResult> Test()
{
return Ok(new Product { Id = 1, Name = "tt" });
}