📅  最后修改于: 2023-12-03 15:36:12.797000             🧑  作者: Mango
在使用 .NET Core 控制器将数据从服务发送到客户端时,我们经常需要将数据从 C# 类型转换为 JSON 格式。在转换过程中,我们希望所有属性的名称保持原样,但在某些情况下会发现 JSON 属性名称会变小写。这种情况通常出现在将 JSON 传递给 JavaScript 应用程序时。在本篇文章中,我们将讨论如何解决这个问题。
要解决 JSON 属性名称变小写的问题,我们需要使用一个名为 JsonPropertyName
的属性来标记我们的 C# 类型的属性。这个属性指定序列化后的属性名称,我们将在其中指定 JSON 属性名称以匹配我们期望的 JavaScript 应用程序要求的属性名称。接下来是一个例子:
public class SampleModel
{
[JsonPropertyName("FirstName")]
public string FirstName { get; set; }
[JsonPropertyName("LastName")]
public string LastName { get; set; }
}
在这个例子中,我们使用 JsonPropertyName
属性指定了 FirstName
和 LastName
属性的 JSON 属性名称。这将确保在序列化过程中保留属性名称,并避免它们被更改为小写。
接下来,我们将看一个完整的示例。假设我们有以下 C# 类型:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我们想要将它序列化为 JSON 并将其发送到前端 JavaScript 应用程序。为了确保序列化是正确的,我们需要确保 JSON 属性名称与 C# 类型属性名称相同。为此,我们需要使用 JsonPropertyName
属性。下面是一个示例:
using System.Text.Json.Serialization;
public class User
{
[JsonPropertyName("FirstName")]
public string FirstName { get; set; }
[JsonPropertyName("LastName")]
public string LastName { get; set; }
}
在上面的示例中,我们添加了 JsonPropertyName
属性来指定 JSON 属性名称。这将确保属性名称保持不变,并避免在序列化过程中将它们更改为小写。
接下来,我们需要将 User
类型序列化为 JSON 格式。为此,我们可以使用 System.Text.Json
命名空间中的 JsonSerializer
对象。下面是一个示例:
using System.Text.Json;
var user = new User { FirstName = "John", LastName = "Doe" };
var json = JsonSerializer.Serialize(user);
在上面的示例中,我们使用 JsonSerializer.Serialize
方法将 User
对象序列化为 JSON 格式。在序列化期间,.NET Core
将使用 JsonPropertyName
属性指定的名称将属性名称转换为 JSON 属性名称。最终的 JSON 将看起来像这样:
{
"FirstName": "John",
"LastName": "Doe"
}
由于我们使用了 JsonPropertyName
属性,JSON 属性名称与 C# 类型属性名称相同。
JSON 属性名称变小写是一个常见的问题,在从 .NET Core 控制器发送数据到前端 JavaScript 应用程序时经常出现。为了避免这个问题,我们可以使用 JsonPropertyName
属性标记我们的 C# 类型属性,指定 JSON 属性名称以保持属性名称不变。