在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进行更好的测试。我无法弄清楚如何
由于
答案 0 :(得分:0)
好的,很明显,但昨天我看不到它。对我感到羞耻。自定义解析程序而不是继承自 DefaultContractResolver 应继承自 CamelCasePropertyNamesContractResolver ,然后我们可以调用基本方法
public class MyCustomResolver : CamelCasePropertyNamesContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return propertyName == "Links" ? "_links" : base.ResolvePropertyName(propertyName);
}
}