当前位置: 首页 > 知识库问答 >
问题:

ASP.NET核心3.0系统。Text.Json骆驼案例序列化

龚弘业
2023-03-14

在 ASP.NET Core 3.0 Web API 项目中,如何指定 System.Text.Json 序列化选项以将 Pascal Case 属性序列化/反序列化为 Camel Case,反之亦然?

给定一个具有 Pascal Case 属性的模型,例如:

public class Person
{
    public string Firstname { get; set; }
    public string Lastname { get; set; }
}

以及使用System.Text的代码。Json将Json字符串反序列化为Person类的类型:

var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);

不会成功反序列化,除非JsonProperty tyName与每个属性一起使用,例如:

public class Person
{
    [JsonPropertyName("firstname")]
    public string Firstname { get; set; }
    [JsonPropertyName("lastname")]
    public string Lastname { get; set; }
}

我在<code>启动中尝试了以下操作。cs,但它在仍然需要JsonPropertyName方面没有帮助:

services.AddMvc().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
    options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});

// also the following given it's a Web API project

services.AddControllers().AddJsonOptions(options => {
    options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
    options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        });

如何使用新的 System.Text.Json 命名空间在 ASP.NET Core 3.0 中设置 Camel Case serialize/deserialize?

谢啦!

共有3个答案

陆敏学
2023-03-14

启动时.cs

// keeps the casing to that of the model when serializing to json
// (default is converting to camelCase)
services.AddMvc()
    .AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null); 

这意味着您不需要导入newtonsoft.json。

options.JsonSerializerOptions的唯一其他选项。PropertyNamingPolicy是JsonNamingPolicy.CamelCase。似乎没有任何其他JsonNamingPolicy命名策略选项,如snake_case或PascalCase。

微生嘉祥
2023-03-14

如果要进行驼峰大小写序列化,请在启动.cs:(例如 firstName)中使用此代码

services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        });

如果您想要PascalCase序列化,请在Startup.cs中使用此代码:(例如FirstName)

services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy= null;
        );
夏侯弘光
2023-03-14

AddJsonOptions()将配置System.Text。Json仅适用于MVC。如果您想在自己的代码中使用JsonSerializer,应该将配置传递给它。

var options = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};

var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Parse<Person>(json, options);
 类似资料:
  • 问题内容: 在ASP.NET Core 3.0 Web API项目中,如何指定System.Text.Json序列化选项以自动将Pascal Case属性序列化/反序列化为Camel Case,反之亦然? 给定具有Pascal Case属性的模型,例如: 以及使用System.Text.Json将JSON字符串反序列化为类类型的代码: 除非将JsonPropertyName与以下每个属性一起使用,

  • .NET核心和ASP.NET核心到底有什么区别?

  • 我试图用序列化方法解组一个bean,它不是当前的bundle,而是一个commons components bundle。 当骆驼尝试解组我的豆子时,我收到以下错误: 22:43:11,865|ERROR|nModule-thread-1|默认错误处理程序|89-0_33-核心-0_33-06-11|交付失败的交换ID: ID-ITEM-64684-49962-1354223882336-2。交付

  • 1、IO层次结构 IO实现普遍采用了层次式的结构。其基本思想与计算机网络中的层次结构相同:将系统IO的功能组织成一系列的层次,每一层完成整个系统功能的一个子集,其实现依赖于下层完成更原始的功能,并屏蔽这些功能的实现细节,从而为上层提供各种服务。 一个比较合理的层次划分为四个层次的系统结构,各层次及其功能如下: 1)用户层IO软件:实现与用户交互的接口,用户可直接调用在用户层提供的、与IO操作有关的

  • 每次CodeIgniter运行时都有很多基础类作为核心框架的一部分被自动初始化.但你也可以使用经过你修改的类来替换甚至扩展这些原始的核心系统类. 大多数用户一般不会有这种需求,但对于那些想较大幅度的改变CodeIgniter的人来说,我们依然提供了替换和扩展核心系统类的选择. 注意:  改变系统核心类会产生很大影响,所以在你做之前必须清楚地知道自己正在做什么. 系统类清单 以下是系统核心文件的清单

  • 每次 CodeIgniter 运行时,都有一些基础类伴随着核心框架自动的被初始化。但你也可以使用你自己类来替代这些核心类或者扩展这些核心类。 大多数用户一般不会有这种需求,但对于那些想较大幅度的改变 CodeIgniter 的人来说,我们依然提供了替换和扩展核心类的选择。 注解 改变系统核心类会产生很大影响,所以在你做之前必须清楚地知道自己正在做什么。 系统类清单 以下是系统核心文件的清单,它们在