2012-03-17 65 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