2014-01-24 44 views
0

NoDB example之後,我更改了現有的WebAPI控制器以使用Breeze.WebApi2.BreezeController註釋。這改變了從很簡單的東西JSON結果:如何禁止BreezeController添加的額外屬性?

[{"Name":"Thing1","Description":"Description of Thing 1"}, 
{"Name":"Thing2","Description":"Another description"}] 

要的東西有點更加複雜和消耗帶寬的:

[{"$id":"1","$type":"MyCompany.MyProduct.Models.ContentType, MyCompany.MyProduct","Name":"Thing1","Description":"Description of Thing 1"}, 
{"$id":"2","$type":"MyCompany.MyProduct.Models.ContentType, MyCompany.MyProduct","Name":"Thing2","Description":"Another description"}] 

而且隨着this previous question所描述的,額外的信息實際上並沒有提供元數據給客戶。我仍然必須手動定義。

鑑於上述情況,有兩個問題:

  1. 什麼用途的額外的信息服務,如果我還是要在客戶端上定義元數據?
  2. 有沒有辦法抑制額外的屬性?

回答

0

在序列化過程中,$ id,$ type和$ ref屬性由Json.NET在服務器上添加。默認情況下,Breeze客戶端使用$ type屬性來確定要實現的'EntityType'。 $ id和$ ref屬性用於處理對象圖,因此引用實體的json永遠不會表達多次。這可能是EntityQuery'expand'方法調用的結果,也可能是通過'select'方法進行的任意數量的複雜投影。

Breeze不需要這些,但是如果你禁止它們(通過服務器上的Json.NET設置),那麼你將需要實現一個客戶端'jsonResultsAdapter'來處理上面提到的所有東西。

+0

所以只需添加BreezeController註解,它就改變了響應的序列化方法?如果breeze客戶端使用$ type,爲什麼我還需要在客戶端上手動定義元數據? – explunit

+0

元數據不僅僅是名稱,它是關於每個屬性的數據類型的數據,實體類型之間的關係等等。 $ type只是讓breeze客戶端將序列化的json連接到所有這些其他元數據。除非要麼從服務器發送(默認),要麼在客戶端的代碼中創建,否則這些元數據本身不會在客戶端上可用。 –

+0

$ type不代表什麼,除非客戶端知道$ type **是什麼** - 它有哪些字段,每個字段的數據類型和驗證規則是什麼,它的主鍵是什麼,它的關係是什麼其他類型。所有這些都是在元數據中定義的。 –

相關問題