0
我想在C#中构建一个数据结构来保存在JavaScript中创建的动态数据,并用JSON表示。我正在寻找关于如何设计C#数据结构来容纳JSON数据的方法,以便于搜索。我目前使用.NET 4.0; 4.5对于这个特定的项目是一种解决方法。如何在C#中使用嵌套集合建模键值对?
数据具有以下性质:
- 键 - 值对的集合
- 键唯一
- 的值可以是任意的
true
,false
, 一些字符串值,或键值对的嵌套集合 - 几十个顶级属性,并且具有嵌套集合的属性在集合中具有六个对
这里的JavaScript的数据的一个例子:
{
foo: true,
bar: false,
baz: {
a: true,
b: false,
c: "maybe"
}
quux: "maybe"
}
我想通过以下方式与数据的工作:一旦我创建数据:
- 1时初始化结构,我只需要读它,所以一个不可变的结构是好的。
- 搜索密钥的存在:我需要能够确定给定的密钥是否存在于数据中。一些键是众所周知的,而另一些键是动态的,所以我不会在运行时知道他们的所有名字,所以我必须使用字符串来查找键。在上面的示例中,假设我事先知道
foo
,bar
和baz
,但quux
对我来说是新的,我不知道它是否存在,如果存在,以及它是否有平面或嵌套值。 - 获取“平坦”值用于一个键:值是
true
,false
和许多用于“平坦”的成员“也许”string
值。如果有必要,我可以将其转换为真正的布尔值(将“可能”值视为true
),但我更愿意保留“可能”值。我想我可以预先知道所有'可能'的值,所以我也可以建立一个包含这些值的Enum
,并且还将true
和false
放在那里,所以我有一个类型的值。 - 获取嵌套数据的键和值:某些键的值本身就是键值对的集合。我需要能够区分这些成员,并搜索嵌套的键和它们的值。根据我所看到的输入数据,我认为嵌套不会超过1级。
由于密钥是唯一的,所以我被查找速度和易用性的词典吸引。但我有点难以表达嵌套集合和平坦值。在JavaScript这样的动态语言中这是非常容易的; C#中相应的成语是什么?
呵呵,在尝试了其他一些事情之后,我终于开始了这条道路 - 我只是希望能够为Object值得到比Object更具描述性的东西! – Val 2013-03-18 20:54:39
你可以使用一个包装类(值)或一个接口和两个包装类(嵌套/平面)。在JavaScript中有可能是动态的,即var-keyword和匿名对象可能会有所帮助,但它们不是很漂亮。 – 2013-03-18 21:05:40