2011-07-06 33 views
6

我想有控制器的GET操作,返回一个JSON序列化的字典。字典的关键是一个简单的类,它有两个基元作为属性 - 称之为ClassOne。不过,我试图JSON字典时收到以下错误:当密钥是非字符串对象时,是否有可能JSON .NET字典?

System.Collections.Generic.Dictionary`2[[ClassOne],[ClassTwo]]' is not supported for serialization/deserialization of a dictionary, keys must be strings or objects. 

短语“键必须是字符串或对象”意味着它可以序列化对象具有作为其键的字典。但是,我找不到这样做的方法。在这种情况下我有什么选择?

+1

你用什么API来“JSON”你的数据? –

+0

不指定您正在使用哪个JSON序列化库,此问题不完整。使用'DataContractJsonSerializer',我得到它的工作,并没有遇到一个异常,虽然它产生的JSON可能有点古怪(不能说)。另外,你能提供一个能够重现你的问题的最小代码示例吗? –

回答

7

那么,没有。 .net中的字典会在Javascript中序列化为哈希。散列只能有字符串作为键,所以你将无法序列化非字符串键。你可以简单地改变你的字典成一个序列化的一个是这样的:

myDictionary.ToDictionary(k => k.Key.Prop1 + "|" + k.Key.Prop2, v => v.Value); 

或许清洁将是给ClassOne一个ToString倍率,只需要调用代码k.Key.ToString()以上。

+0

看起来我们正在创建一个字符串键出对象。谢谢! – JustOnePixel

相关问题