是否有可能让WCF DataServices JSON结果始终返回camelCase?

时间:2011-07-15 13:27:08

标签: wcf json odata camelcasing

我希望在我的项目中使用由WCF DataServices托管的OData端点,从javascript前端调用它。重要的是JSON对象上的属性名称遵循Javascript约定而不是c#约定.i.e:

ThisIsAProperty应该结束:thisIsAProperty

相反,c#对象必须保留惯用的c#命名约定。

实现此目标并不会导致我的c#代码中的任何重复意图也很重要。例如,为每个只重新显示camelCase属性名称的属性添加属性是不可接受的。

在使用ASP.NET MVC和Newtonsoft JSON序列化程序时,通过在序列化时只需翻转开关,我就能轻松完成此任务。

是否有这样的方法可以确保数据始终使用camelCase属性名序序列化为JSON?

2 个答案:

答案 0 :(得分:1)

是,实施ISerializable并在驼峰案例中定义您的值:

[Serializable]
public class MyObject : ISerializable 
{
  public int n1;
  public int n2;
  public String str;

  public MyObject()
  {
  }

  protected MyObject(SerializationInfo info, StreamingContext context)
  {
    n1 = info.GetInt32("camelCase1");
    n2 = info.GetInt32("propertyValue2");
    str = info.GetString("kK");
  }
[SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
  {
    info.AddValue("camelCase1", n1);
    info.AddValue("propertyValue2", n2);
    info.AddValue("kK", str);
  }
}

答案 1 :(得分:0)

WCF数据服务区分大小写,因此更改服务器和javascript客户端之间的大小写并不是一种选择。

然而,WCF DS只是绑定到底层数据模型,所以如果你可以控制你可以很容易地在数据模型中创建所有camelCase。即进入EF设计器并设置所有EntitySets,属性和关系到camelCase名称。

可能不是你想要的东西虽然看到这会影响任何C#代码...... -Alex