我正在尝试在 C# 中构建一个数据结构来保存在 JavaScript 中创建并用 JSON 表示的动态数据。我正在寻找有关如何设计 C# 数据结构以易于搜索的方式保存 JSON 数据的建议。我目前正在使用 .NET 4.0;4.5 是这个特定项目的一个方法。
数据具有以下属性:
- 键值对的集合
- 键是唯一的
- 这些值可以是
true
、false
、某些字符串值或键值对的嵌套集合中的任何一个 - 几十个顶级属性,嵌套集合的属性在集合中有六对
以下是 JavaScript 数据的示例:
{
foo: true,
bar: false,
baz: {
a: true,
b: false,
c: "maybe"
}
quux: "maybe"
}
我想通过以下方式处理数据:
- 1 次初始化:一旦我创建了数据结构,我只需要读取它,所以一个不可变的结构就可以了。
- 搜索是否存在键:我需要能够确定给定键是否存在于数据中。有些键是众所周知的,有些是动态的,所以直到运行时我才会知道它们的所有名称,所以我必须使用字符串查找键。在上面的示例中,假设我提前知道
foo
,bar
和baz
, 但quux
对我来说是新的,并且我不提前知道它是否存在,是否存在,以及它是否将具有平面或嵌套值。 - 获取键的 'flat' 值:值是
true
,false
以及 'flat' 成员的一些 'maybe'string
值。如有必要,我可以将其转换为真正的布尔值(将“可能”值视为true
),但我更愿意保留“可能”值。我想我可以预先知道所有“可能”的值,所以我也可以建立一个Enum
持有这些值的值,并且也可以在那里抛出true
,false
所以我有一个单一的值类型。 - 获取嵌套数据的键和值:一些键的值本身就是键值对的集合。我需要能够区分这些成员,并搜索嵌套键及其值。从我所看到的输入数据来看,我认为嵌套的深度不会超过 1 级。
由于键是独一无二的,我对字典的查找速度和易用性很感兴趣。但是我有点难以理解将嵌套集合与平面值一起表示。这在 JavaScript 这样的动态语言中非常容易。C#中对应的成语是什么?