自定义Json.NET合约解析器,用于将小写下划线转换为CamelCase

时间:2013-08-05 05:52:50

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

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

来自具有字符串属性PersonFirstName的类Surname,我得到如下JSON:

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

请注意lowercase_underscore名称。

我用来为我自动执行此转换的合约解析程序是:

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)

1 个答案:

答案 0 :(得分:2)

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

public object Put(int id, Person person)