2017-08-04 12 views

回答

2

简短回答:没有。

龙答:

最近的C#相当于是Dictionary

您可以使用它像这样:

var myDict = new Dictionary<string, int>(); 

// Adding values 
myDict.Add("foo", 3); 
myDict["bar"] = 8; // Alternative syntax 

// Getting values 
int bar = myDict["bar"]; 
bool fooExists = myDict.ContainsKey("foo"); // true 

// Safe get 
int foo; 
bool ableToGetFoo = myDict.TryGetValue("foo", out foo); 

// Splitting 
var allKeys = myDict.Keys; 
var allValues = myDict.Values; 

然而,这不会对你工作。至少,不是以任何直接的方式。

你必须认识到C#是一种强类型语言。这意味着与所有其他集合一样,C#的字典也有一个限制:所有元素必须是相同的类型。这意味着所有的键必须是相同的类型,并且所有的值也必须是彼此相同的类型。这就是类型化语言的强大功能。

如果您想在C#中重新创建您的示例,您必须定义一个自定义数据结构以适应它。然而,在你的例子中出现的所有嵌套都会使这个具有挑战性。它的一些元素,比如这个特定的位:

["e","f",{"g"=>1}] 

..绝对不可能。数组或列表不能有完全不同类型的元素。

这是我创造类似的例子一些尝试:

var x = new Dictionary<string, Dictionary<string, List<string>>>() 
{ 
    { 
     "a", new Dictionary<string, List<string>>() 
     { 
      {"b", ["c"]}, 
      {"d", ["e", "f", "g"]} 
     } 
    }, 
}; 

编辑:为了使用JSON工作你需要采取基于类的方法。这将是这个样子:

public class A 
{ 
    public string b { get; set; } 
    public List<object> d { get; set; } 
} 

public class RootObject 
{ 
    public A a { get; set; } 
} 

以及相应的JSON(从你的例子直接翻译):

{ 
    "a": { 
     "b":"c", 
     "d":["e", "f", {"g":1}] 
    } 
} 
+0

感谢,是的,我想知道它怎么可能创建这样的哈希值。在C#中,这种类似的东西不可能以更直接的方式实现,因为JSON的格式类似于混合数据类型。如果你使用C#将精确的散列输出到json,你会怎么做? –

+0

@BA检查编辑。这将*工作*,但是你不应该使用C#。您的最佳行动方案是重新分析您的数据,或者坚持使用动态语言,以适应现实。 – stybl