2013-08-20 61 views
2

有我的控制裝置的呼叫在執行這樣的事情:MVC JSON數據參考

someObject.Name = "Mike"; 

JsonResult result = Json(new { TheMan = someObject }, JsonRequestBehavior.AllowGet); 

someObject.Name = "Paul"; 

return result; 

的問題是,當客戶端接收數據時,名爲「保羅」的時候,我期待的是結果JSON是用「Mike」創建的。

docs它說「通過此方法準備的結果對象被寫入到ASP.NET MVC框架在執行對象時的響應中。」

是否有一個workarround,我可以操縱JSON數據上使用的對象而不用擔心更改響應? (克隆someObject或東西)

謝謝。

回答

3

你幾乎說過了。當你創建Json對象時,你只需添加一個對someObject的引用,所以如果你改變它的值,它也會在Json對象內部改變。在操作返回JsonResult之前,Json實際上沒有寫入響應。如果您想將值設置爲其他值而不影響原始值,則需要另一個對象副本。

+0

我最終爲JSON創建了一個新的克隆「someObject」,因爲在聲明時似乎沒有「凍結」JSON的選項。我會等幾天來檢查這一個是否正確的答案,只是爲了讓/鼓勵任何人提出其他建議。 –

+0

夠公平的。這只是語言的作用方式,幾乎真的是任何語言。 – asymptoticFault

+0

如果它的構造函數接收到另一個對象A(B b)並使用它來設置它自己的屬性「this.Name = b.Name;」時,它還取決於創建的對象(A類)的行爲,當B.Name更新將不會發生A.Name –