2012-03-17 95 views
5

在我的解決方案中,我非常依賴以enum作爲關鍵字的字典。我發現很容易理解並閱讀這種結構。替代帶有枚舉鍵的字典?

上述的一個重大障礙是不可能序列化這個。有關詳細信息,請參閱Problems with Json Serialize Dictionary<Enum, Int32>

我的問題是:
是否有更換Dictionary<enunm,object>一個同樣可讀,直觀的模式是JSON序列化與內置JSON序列?

今天我已將a.Instance.QueryableFields[Fields.Title]替換爲a.Instance.QueryableFields[ Fields.Title.ToString()]。不是很優雅,它是開放的錯誤。

+0

是你的對象的枚舉屬性存儲爲字典的值?在這種情況下,我可能會建議使用枚舉值作爲哈希碼。 – Brannon 2012-03-17 16:24:13

+0

這將如何工作?你能指點我一個例子嗎? – Fontanka16 2012-03-17 20:31:09

回答

-1

您可以方便的更換字典,這裏的數組,在C#枚舉在內部保存爲整數:

public enum MyEnum { Zero=0, One, Two }; 

object[] dictionary = new object[3]; 
dictionary[(int)MyEnum.Zero] = 4; 

編輯:(見註釋)

您還可以Dictionary<Int, Object>取代Dictionary<Enum, Object>

+5

只有在確定值從「0」到「array.Length-1」而沒有任何中斷的情況下,這纔有意義。如果你有一個類似'{A = 0,B = 42,C = 31415}的枚舉',你應該創建一個'31416'元素的數組...... – digEmAll 2012-03-17 14:41:49

1

序列化時,只需選擇字符串值。它不是很整潔,但它的工作原理。

a.Instance.QueryableFields.ToDictionary(x => x.Key.ToString(), x => x.Value) 
+0

這是我已經考慮過的一個選項。但是,我不得不寫我自己的序列化方法。感謝您的建議,但我正在尋找一種方法來取代整個事情。字典或枚舉。 – Fontanka16 2012-03-17 20:28:58