2015-03-25 76 views
0

假設我有記錄的一般表(我首先使用EF代碼),並且可以有許多不同類型的可用於此表的詳細信息:數據庫字段和asp.net的Json反序列化mvc

class Record{ 
int Id, 
int TypeOfDetails, // int enum Type1, Type2 
string Details, //string with json content 
string Attribute 1, 
string Atribute 2, 
... 
} 

class DetailsType1{ 
    string InternalAtribute1, 
    .... 
} 

我決定使用Json將Details對象序列化到數據庫字段中。 這允許在不改變數據庫模式的情況下靈活處理不同的細節。

使用一個記錄很容易,我知道類型的詳細信息對象,所以我可以序列化和反序列化。

但如何有效地檢索多個記錄,並能夠在MVC中參考的細節? 讓說我這樣做:

var results = await context.Record.Where(..).ToAsyncList(); 

我希望能夠做到這一點在我的.cshtml:

@Html.DisplayFor(modelItem => item.Record.Details.InternalAtribute1) 

本質上,它會在飛行中做反序列化..

或者,如果在AngularJS中可以這樣做,它也會有所幫助。

讓我知道如果我讓自己清楚我的問題。

+0

目前還不清楚你想達到什麼目的。你能否更詳細地解釋你想在'Details'字段中保存什麼? – 2015-03-25 12:41:05

+0

我想將對象DetailsType1保存爲json。可能還有DetailsType2和DetailsType3,所以我可以根據情況使用它們。 – 2015-03-25 12:59:48

+0

爲了說明我的第一個想法是:1.將Object DetailsExpanded字段添加到[NoMapped]的Record類,以便不去db。然後創建方法,將反序列化到此屬性的細節...不是很優雅也沒有效,因爲我需要在循環中執行此方法.. – 2015-03-25 13:11:25

回答

0

我會回答我的問題。我找出最佳的是這樣的:

​​

你仍然需要在所有查詢結果執行PopulateDetails,我做它在foreach循環。 然後在CSHTML你可以這樣做:可以顯示

@item.Details["InternalAtribute1"]) 

你的內部JSON對象的詳細信息。