c# - 用于小写下划线到 CamelCase 的自定义 Json.NET 契约(Contract)解析器

标签 c# asp.net-mvc json rest json.net

我正在 ASP.NET MVC 中开发 REST API,其中生成的序列化 JSON 使用 lowercase_underscore 作为属性。

从具有字符串属性 FirstNameSurname 的类 Person 中,我得到如下 JSON:

{
  first_name: "Charlie",
  surname: "Brown"
}

注意小写_下划线名称。

我用来为我自动执行此转换的契约(Contract)解析器是:

public class JsonLowerCaseUnderscoreContractResolver : DefaultContractResolver
{
    private Regex regex = new Regex("(?!(^[A-Z]))([A-Z])");

    protected override string ResolvePropertyName(string propertyName)
    {
        return regex.Replace(propertyName, "_$2").ToLower();
    }
}

一切正常,但我不知道如何使用 Json.NET 实现反向。因此,例如,我可以如下声明一个 API 方法,它知道将请求正文中传入的 JSON 转换为适当的对象:

public object Put(int id, [FromBody] Person person)

最佳答案

好的,找到解决方案了。我缺少 Person 类的默认构造函数。一旦我这样做了,映射就在调用 Put 方法时起作用了。事实上,我还可以删除 FromBody 说明符:

public object Put(int id, Person person)

关于c# - 用于小写下划线到 CamelCase 的自定义 Json.NET 契约(Contract)解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18051395/

相关文章:

c# - 无法找到请求的 .Net Framework 数据提供程序。 (SQL客户端)

javascript - JSON 中位置 39 处出现意外标记

C# GemBox-SpreadSheet 从右到左

c# - 如何在 jquery 中单击时获取动态创建的 html 按钮的 id

c# - 如何在另一个 View 的列表中显示用户点击的产品?

asp.net-mvc - 如何在 ASP.NET MVC4 中包含 Bootstrap 图标?

javascript - 如何向 Json 结果添加自定义字段 - ASP.NET MVC

json - 能够使用JSON对象创建Hive表,但并非所有对象都被捕获到各自的属性中

c# - TPL 数据流广播 block 丢弃最后一条消息

c# - asp.net 如何从表中删除除第一行以外的所有行