3

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

ThisIsAProperty应该结束:thisIsAProperty

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

同样重要的是,实现这一目标不会导致我的 c# 代码中出现任何重复的意图。例如,向每个属性添加属性以简单地重述 camelCase 中的属性名称是不可接受的。

在使用 ASP.NET MVC 和 Newtonsoft JSON 序列化程序时,我可以很容易地完成此操作,只需在序列化时翻转开关即可。

有没有这样一种方法可以确保数据总是序列化为带有 camelCase 属性名称的 JSON?

4

2 回答 2

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);
  }
}
于 2011-07-15T14:07:42.413 回答
0

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

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

可能不是您正在寻找的东西,因为这也会影响任何 C# 代码...... -Alex

于 2011-07-15T22:00:03.317 回答