ASP.NET MVC:使用 JsonResult 控制属性名称的序列化

js

1个回答

写回答

Evacccc

2025-07-07 04:30

+ 关注

JS
JS

使用 JSonResult 控制属性名称的序列化

在 ASP.NET MVC 中,JSonResult 是一种常用的返回类型,用于将数据以 JSON 格式返回给客户端。默认情况下,JSonResult 会将属性名称按照 PascalCase(首字母大写)的规则进行序列化。然而,在某些情况下,我们可能需要控制属性名称的序列化方式,例如将属性名称转换为 camelCase(首字母小写)或下划线分隔命名。

为了实现这个需求,我们可以通过自定义 JSonConverter 来控制属性名称的序列化方式。下面是一个示例,演示了如何使用自定义 JSonConverter 来将属性名称转换为 camelCase。

csharp

using System;

using Newtonsoft.JSon;

using Newtonsoft.JSon.Serialization;

public class CamelCasePropertyNamesContractResolver : DefaultContractResolver

{

protected override string ResolvePropertyName(string propertyName)

{

// 将属性名称转换为 camelCase

return Char.ToLowerInvariant(propertyName[0]) + propertyName.Substring(1);

}

}

public class Person

{

public string FirstName { get; set; }

public string LastName { get; set; }

}

public class HomeController : Controller

{

public IActionResult Index()

{

var person = new Person

{

FirstName = "John",

LastName = "Doe"

};

var settings = new JSonSerializerSettings

{

ContractResolver = new CamelCasePropertyNamesContractResolver()

};

var JSon = JSonConvert.SerializeObject(person, settings);

return Content(JSon, "application/JSon");

}

}

自定义 JSonConverter 控制属性名称的序列化方式

在上面的示例中,我们创建了一个名为 CamelCasePropertyNamesContractResolver 的自定义 ContractResolver。在 ResolvePropertyName 方法中,我们将属性名称的首字母转换为小写,从而实现了将属性名称转换为 camelCase 的功能。然后,我们将该自定义 ContractResolver 赋值给 JSonSerializerSettings 的 ContractResolver 属性,以便在序列化对象时使用该自定义 ContractResolver。

在 HomeController 的 Index 方法中,我们创建了一个 Person 对象,并将其序列化为 JSON。在序列化过程中,我们通过将 JSonSerializerSettings 的 ContractResolver 属性设置为我们自定义的 CamelCasePropertyNamesContractResolver,从而使属性名称按照 camelCase 规则进行序列化。最后,我们将序列化后的 JSON 字符串返回给客户端。

这样,当我们访问 HomeController 的 Index 方法时,将会得到以下 JSON 响应:

JSon

{

"firstName": "John",

"lastName": "Doe"

}

通过这种方式,我们可以灵活地控制属性名称的序列化方式,以满足不同的需求。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号