在某些情况下,自定义json contractresolver .net web api会回归到camelcase

时间:2013-12-02 23:35:21

标签: c# serialization asp.net-web-api

在asp.net web api中我想序列化我的C#属性(pascal case),其方式是名称为“Links”的任何属性应序列化为“_links”,其余属性应序列化为自身骆驼套管。

到目前为止,我有这段代码

public class MyCustomResolver : DefaultContractResolver
{
    protected override string ResolvePropertyName(string propertyName)
    {
        if (propertyName == "Links")
        {
            return "_links";
        }
        return propertyName;
    }
}

在WebApiConfig的Register方法中使用它

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.ContractResolver = new MyCustomResolver();

我设法将链接序列化为_links。为了“驼峰式”其余的属性,我可以尝试使用Web中的一种方法来实现C#字符串,但我想知道是否有一种方法只使用内置的Json.net CamelCasePropertyNamesContractResolver 我认为应该对所有的scenerarios进行更好的测试。我无法弄清楚如何

由于

1 个答案:

答案 0 :(得分:0)

好的,很明显,但昨天我看不到它。对我感到羞耻。自定义解析程序而不是继承自 DefaultContractResolver 应继承自 CamelCasePropertyNamesContractResolver ,然后我们可以调用基本方法

public class MyCustomResolver : CamelCasePropertyNamesContractResolver
{
    protected override string ResolvePropertyName(string propertyName)
    {
        return propertyName == "Links" ? "_links" : base.ResolvePropertyName(propertyName);
    }
}