【问题标题】:Is it possible to get WCF DataServices JSON Results to always return camelCase?是否可以让 WCF DataServices JSON 结果始终返回 camelCase?
【发布时间】:2011-07-15 13:27:07
【问题描述】:

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

ThisIsAProperty 最终应该是:thisIsAProperty

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

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

在使用 ASP.NET MVC 和 Newtonsoft JSON 序列化程序时,我可以通过在序列化时简单地翻转一个开关来相当轻松地完成此操作。

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

【问题讨论】:

    标签: wcf json odata camelcasing


    【解决方案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);
      }
    }
    

    【讨论】:

      【解决方案2】:

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

      但是 WCF DS 只是简单地绑定到底层数据模型,因此如果您可以控制它,您就可以非常轻松地将数据模型中的所有内容都设为 camelCase。 IE。进入 EF 设计器并设置所有的 EntitySets、Properties 和 Relationships 到 camelCase 名称。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-16
        相关资源
        最近更新 更多