JSON.NET C#获取对反序列化对象的访问权限

时间:2014-03-28 11:50:01

标签: c# .net json linq

我有一些JSON数据,我已设法获取并放置在动态类型中。

这是它看起来像JSON。

{"fruits":{"a":"orange","b":"banana","c":"apple"},"numbers":[1,2,3,4,5,6],"holes":{"0":"first","5":"second","6":"third"}}

这是我如何使用动态类型收集它。

dynamic myObj =JsonConvert.DeserializeObject(output);

我需要找到一种方法来分离对象并放置在某种数组中,这样我就能掌握这些值。假设我想获取孔数组并获得对某种循环中所有值的访问权。

非常感谢任何建议。

谢谢

2 个答案:

答案 0 :(得分:3)

查看System.Web.Script.Serialization.JavaScriptSerializer

您可以将JSON字符串反序列化为强类型类,如下所示:

数据类

public class AutocompleteAction
{
    public String action { get; set; }
}

您将拥有嵌套类。然后语法看起来与此parse google maps geocode json response to object using Json.Net

类似

用法

string json = // your json string
JavaScriptSerializer js = new JavaScriptSerializer();
AutocompleteAction jsonObject = js.Deserialize<AutocompleteAction>(json);
switch (jsonObject.action)
{
  //
}

答案 1 :(得分:0)

我最后使用Json.NET做到了这一点。希望它对某人有用。会喜欢评论和批评,因为可能有更好的方法。

string output = writeClient.Get<string>("mykey");
            JObject myObj = (JObject)JsonConvert.DeserializeObject(output);
            JObject fruits = myObj["fruits"] as JObject;
            JObject holes = myObj["holes"] as JObject;

            foreach (var fruit in fruits)
            {

                MyTestClass myClass = new MyTestClass();
                myClass.myKey = fruit.Key;
                myClass.myVal = fruit.Value.ToString();

            }

            JToken nums = myObj["nums"];
            IEnumerable<string> allString = nums.Children().Values<string>();

            foreach (var myVal in allString)
            {
                // do something..
            }