使用Linq从Json获取字符串列表

时间:2013-06-28 19:44:31

标签: json linq c#-4.0 json.net esri

我已经获得了这个JSON(下方),我在选择一个字符串列表时遇到了麻烦,该列表将是" MARYLAND"," NEW YORK",& #34;宾夕法尼亚州"

    {
  "displayFieldName": "NAME",
  "fieldAliases": {
    "STATE": "STATE"
  },
  "fields": [
    {
      "name": "STATE",
      "type": "esriFieldTypeString",
      "alias": "STATE",
      "length": 20
    }
  ],
  "features": [
    {
      "attributes": {
        "STATE": "Maryland"
      }
    },
    {
      "attributes": {
        "STATE": "New York"
      }
    },
    {
      "attributes": {
        "STATE": "Pennsylvania"
      }
    }
  ]
}

到目前为止,我正在获取json字符串并将其反序列化为JObject,我可以看到这些孩子。我在使用它时遇到了麻烦但是它不适合我可能看到的其他例子,因为"功能"是"属性"的集合。我在写linq时难以进入下一级别。

这是我的代码:

            var foo = response.Content.ReadAsStringAsync().Result;

            var json = (JObject)JsonConvert.DeserializeObject(foo);

            var cf = json["features"].Children();

有人可以帮我用linq语句从中获取状态字符串吗?

由于

1 个答案:

答案 0 :(得分:0)

假设您的JObject课程看起来与下面的示例类似,您可以执行以下操作:

string[] states = json.features.SelectMany(f => f.attributes).ToArray();

这产生了一个包含马里兰州,纽约州和宾夕法尼亚州三个条目的单个阵列。

完整样本:

class JObject
{
    public Feature[] Features { get; set; }
}

class Feature
{
    public string[] Attributes { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        Feature f1 = new Feature { Attributes = new[] { "Maryland" } };
        Feature f2 = new Feature { Attributes = new[] { "New York" } };
        Feature f3 = new Feature { Attributes = new[] { "Pennsylvania" } };

        JObject state = new JObject
        {
            Features = new[] { f1, f2, f3 }
        };

        string[] states = state.Features.SelectMany(f => f.Attributes).ToArray();
    }
}