2012-09-05 41 views
0

在ASP.NET MVC 4應用程序中,我從包含「字段」數組的外部服務器獲取JSON響應。每個字段都是單獨的類型,幷包含該類型的值的數組。根據JSON內容動態選擇類型

我想將該JSON反序列化爲DynamicObject,以便我可以訪問個別值的屬性,或者需要某種子類選擇器來決定從「ValueBase」類派生哪個類訪問單個值對象的不同屬性。

我希望你明白我的意思......這有點複雜。

我已經試圖將它反序列化成一個DynamicObject(一個從DynamicObject派生出來的類)。但是,當我在View中訪問該對象的動態屬性時,我收到了錯誤消息,我想要顯示的屬性不存在。

那麼,派生自DynamicObject的類如何看起來像接受並授予對JSON代碼提供的各個不同「value」屬性的訪問權?

如果這是不可能的或錯誤的方式去,我將不得不實施一個合適的類型選擇器類?

非常感謝!

+0

如果這是一個ASP.Net特定的問題,它可能會受益於被標記爲這樣,從ASP.Net人更多的關注。 – cloudfeet

+0

你說得對。我知道我已經忘記了一些東西......好吧,它被標記了。 –

回答

0

我自己有點解決它。

代替返回的JSON對象(JSON數組更精確地)直接轉​​化成特定的I類取它作爲一個動態,並給它成一類,其中包含的另一實例的集合的構造該對象實際上應該是(我得到一個JSON數組返回從Web服務無論如何)。在集合類的構造函數中,我決定依賴於新對象將繼承的類的JSON對象的值,並將其放入集合中。是的,我以某種方式走上了這條路,但是它行得通。

是這樣的:

public CollectionClass(dynamic dyn) 
{ 
    foreach(var item in dyn.items) { 
    switch((string)item.external_id) { // might have used a Dictionary instead but... 
     case "member": 
     this._collection.Add(new Member(item)); 
     break; 
     case "date": 
     this._collection.Add(new Date(item)); 
     break; 
     default: break; 
    } 
    } 
} 

會員級本身含有類似的構造也需要動態參數。而且它也「自建」,取決於項目內的值。

如果有任何更簡單的方法或實現此目標的「皇室之路」,我會很感激任何進一步的建議。