我希望在我的项目中使用由WCF DataServices托管的OData端点,从javascript前端调用它。重要的是JSON对象上的属性名称遵循Javascript约定而不是c#约定.i.e:
ThisIsAProperty
应该结束:thisIsAProperty
相反,c#对象必须保留惯用的c#命名约定。
实现此目标并不会导致我的c#代码中的任何重复意图也很重要。例如,为每个只重新显示camelCase属性名称的属性添加属性是不可接受的。
在使用ASP.NET MVC和Newtonsoft JSON序列化程序时,通过在序列化时只需翻转开关,我就能轻松完成此任务。
是否有这样的方法可以确保数据始终使用camelCase属性名序序列化为JSON?
答案 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