【问题标题】:How do I get the value in a generic Dictionary?如何在通用字典中获取值?
【发布时间】:2015-09-07 07:37:07
【问题描述】:

我有一个像这样的json 字符串:

{
  "ipaddress": "xxx",
  "hostname": "comcast.xxx",
  "popup": {
    "position": "1256",
    "pagename": "home"
  }
}

在我的 Windows 窗体代码中,我一直在使用 JavaScriptSerializer 将这些行转换为字典。

var obj = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(json);

目前工作正常,但我不知道如何在popup 中获取价值?因为它是另一本字典。

[7] = {[popup, System.Collections.Generic.Dictionary`2[System.String,System.Object]]}

【问题讨论】:

    标签: c# generics dictionary


    【解决方案1】:

    最快(但不安全)的方法是通过索引器:

    首先提取第一个字典并进行转换,因为第一个字典将产生object类型的对象:

    var popup = (Dictionary<string, object>)obj["popup"];
    

    然后,根据键提取值:

    var position = popup["position"];
    var pagename = popup["pagename"];
    

    如果您不确定结果中是否存在这两个键,您可以使用Dictionary.TryGetValue(如果它们存在):

    obj position;
    if (!popup.TryGetValue("position", out position))
    {
        // Key isn't in the dictionary.
    }
    

    【讨论】:

    • 报错Cannot apply indexing with [] to an expression of type 'object'一开始试过了,还是不行。
    • 这需要强制转换,因为编译器只知道它将是 object 而不是 IDictionary&lt;string,object&gt;
    【解决方案2】:

    使用JSON .Net,然后简单地:

    JObject dynJson = JObject.Parse(jsonString);
    

    后跟:

    string data = dynJson["popup"]["position"];
    

    JObject.Parse

    【讨论】:

    • 我也试过,但是当我压缩和混淆代码时,我的应用程序已经停止工作。
    • @vietnguyen09 所以没有压缩/混淆器上面的代码对你有用吗? :)
    • 是的,没有混淆器就可以正常工作,这是非常好的帮助类
    猜你喜欢
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多