如何从c#中的对象列表中获取值

时间:2014-02-26 05:41:30

标签: c# json

我已经调用了一个Json Web服务并将结果输入到c#中.Json Web服务数据的格式如下:

 {
  "Count": 9862,
  "Items": [
    {
      "Admin": {
        "S": "false"
      },
      "UserId": {
        "S": "e9633477-978e-4956-ab34-cc4b8bbe4adf"
      },
      "Age": {
        "N": "76.24807963806055"
      },
      "Promoted": {
        "S": "true"
      },
      "UserName": {
        "S": "e9633477"
      },
      "Registered": {
        "S": "true"
      }
    },
    {
      "Admin": {
        "S": "false"
      },
      "UserId": {
        "S": "acf3eff7-36d6-4c3f-81dd-76f3a8071bcf"
      },
      "Age": {
        "N": "64.79224276370684"
      },
      "Promoted": {
        "S": "true"
      },
      "UserName": {
        "S": "acf3eff7"
      },
      "Registered": {
        "S": "true"
      }
    },

我在c#中得到了这样的响应:

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:8000/userdetails");
        try
        {
            WebResponse response = request.GetResponse();
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                return reader.ReadToEnd();
            }
        }

在最终成功获得响应后,我已经获得了字符串中的所有数据。然后在对象列表中解析这个字符串。现在我有调试中显示计数的对象列表。现在我想访问像UserId这样的值:acf3eff7-36d6-4c3f-81dd-76f3a8071bcf like properties.I不知道如何要做到这一点。请帮助我,任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:1)

您可以使用以下代码从json获取值:

        JObject obj = JObject.Parse(json);
        int count = (int)obj["Count"];
        var Items = obj["Items"];
        foreach (var item in Items)
              var admin = item["Admin"];

答案 1 :(得分:1)

快速而肮脏的方式:

    //deserialize  your string json using json.net
    dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
    //get value of UserId in first Item
    var UserId = jsonObj["Items"][0]["UserId"]["S"];

    //OR get the value of UserId for each Item in Items
    //foreach(dynamic item in jsonObj["Items"])
      //item["UserId"]["S"];

建议使用@yousuf

中提到的c#对象

答案 2 :(得分:1)

为了能够像普通的C#对象属性一样访问Json属性,您需要将json字符串反序列化为强类型对象(例如,您可以使用JSON.NET进行反序列化)。

另一个方便的工具是http://json2csharp.com/。将Json粘贴到那里,然后您可以生成适合自动映射Json的类定义:

//RootObject class definition generated using json2csharp.com
//the rest of class definition removed for brevity.
public class RootObject
{
    public int Count { get; set; }
    public List<Item> Items { get; set; }
}
........
........
//in main method
var jsonString = .....;
//deserialize json to strongly-typed object
RootObject result = JsonConvert.DeserializeObject<RootObject>(jsonString);
foreach(var item in result.Items)
{
    //then you can access Json property like common object property
    Console.WriteLine(item.UserId.S);
}

答案 3 :(得分:0)

您要将字符串反序列化为c#对象。你需要创建一个重复json的对象。

例如 -

  public class Admin
  {
    public string S { get; set; }
  }

  public class UserId
  {
    public string S { get; set; }
  }

  public class Age
  {
    public string N { get; set; }
  }

  public class Promoted
  {
    public string S { get; set; }
  }

  public class UserName
  {
    public string S { get; set; }
  }

  public class Registered
  {
    public string S { get; set; }
  }

  public class RootObject
  {
    public Admin Admin { get; set; }
    public UserId UserId { get; set; }
    public Age Age { get; set; }
    public Promoted Promoted { get; set; }
    public UserName UserName { get; set; }
    public Registered Registered { get; set; }
  }

然后使用jsonSerializer

将json字符串反序列化为对象
JavaScriptSerializer serializer = new JavaScriptSerializer();
   var result = 
          (RootObject)serializer .DeserializeObject("Json String")

答案 4 :(得分:-2)

    string json = @"{
    ""Name"": ""Apple"",
    ""Expiry"": new Date(1230422400000),
    ""Price"": 3.99,
    ""Sizes"": [
        ""Small"",
        ""Medium"",
        ""Large""
    ]
}";

JObject o = JObject.Parse(json);

//This will be "Apple"
string name = (string)o["Name"];