2017-06-08 113 views
0

我在我們的Intranet中使用第三方映射來實現某些圖表功能。要填充的區域,我需要通過它正是如此格式化的對象集合(JavaScript的):C#:返回Javascript對象集合與對象數組

  simplemaps_usmap_mapdata.state_specific = { 
      AZ: { 
       name: "Arizona", 
       description: "The best state in the whole got damn union", 
       color: "#cecece", 
       hover_color: "default", 
       url: "", 
       }, 
      NH: { 
       name: "New Hampshire", 
       description: "Small and insignificant", 
       color: "#f68831", 
       hover_color: "default", 
       url: "", 
       } 
     } 

顯然,這要好得多,如果它是對象的數組,那麼它會是簡單的足夠通過我的C#控制器返回一個List,但由於它是一個對象集合,通過我的C#控制器以這種方式格式化返回JSON的最佳方式是什麼?

+0

你能產生'[數據合同]'每個國家的對象,序列化這些以JSON,然後手動格式化JSON的休息嗎?我不確定如何使用自定義結構自動轉換對象數組。如果你認爲這會有所幫助,我可以舉一個例子。 –

回答

0

我打算假設你已經配置好你的控制器來返回JSON,這意味着你的對象類型是唯一需要設置的東西。

正如您可能已經意識到的那樣,這種格式的問題在於您需要定義一個對象,該對象具有所有狀態的根級別。當你不需要返回每一個狀態時,這是單調乏味的,而且可能是過度的。

要解決此問題,請使用dynamic類型或C#中的匿名對象。這將允許你定義你需要在那個時候正是:

僞代碼爲您的控制器的方法:

public dynamic MyAction() // Dynamic 
public object MyAction() // Object 
{ 
    return new { 
     AZ = new StateObj(), // Insert your state type here 
     NH = new StateObj() 
    } 
} 
2

首先,一類:

class MyClass { 
    public string name {get;set;} 
    public string description {get;set;} 
    public string color {get;set;} 
    public string hover_color {get;set;} 
    public string url {get;set;} 
} 

然後,一本字典:

var result = new Dictionary<string, MyClass>(); 

添加到詞典:

result["AZ"] = new MyClass { name="xyz"... }; 

最後,通過JSON方法返回字典:

return JSON(result); 
+0

甚至沒有考慮過字典,我更喜歡那個 –

+1

創建中級課程有很長的路要走。不可避免地,將會有另一種方法需要與輸出完全相同的結構;) –

+0

是的我沒有在我的答案中顯示創建中間類,但是將其作爲字典與使用動態進行封裝我認爲是更好的路線 –