2011-07-15 36 views
3

我希望在我的項目中使用由WCF DataServices承載的OData端點,從JavaScript前端調用它。重要的是,在JSON對象屬性名必須遵循的Javascript約定,而不是C#約定.i.e:是否可以讓WCF DataServices JSON結果始終返回camelCase?

ThisIsAProperty應該結束了:thisIsAProperty

相反,C#的對象,必須保留地道的C#命名約定。

實現此目標不會導致我的c#代碼中出現重複意圖也很重要。例如,向每個屬性添加屬性,只是在camelCase中重新聲明屬性名稱是不可接受的。

在使用ASP.NET MVC和Newtonsoft JSON序列化器時,通過在序列化時簡單地切換開關,我能夠很容易地完成此操作。

有沒有這樣的方法來確保數據總是序列化爲帶有camelCase屬性名稱的JSON?

回答

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); 
    } 
} 
0

WCF數據服務是大小寫敏感的,所以改變了服務器和客戶端的JavaScript之間的情況下,是不是一個真正的選擇。

但是WCF DS只是簡單地綁定到底層數據模型,所以如果你可以控制,你可以非常容易地在數據模型中創建一切camelCase。即進入EF設計器並設置所有的EntitySets,Properties和Relationships爲camelCase名稱。

可能不是你正在尋找的東西,雖然看到,因爲這也會影響任何C#代碼... -Alex