如何从C#中的json响应字符串获取值

时间:2014-10-16 05:26:08

标签: c# asp.net-mvc json

我想从这个json响应字符串中获取“id”“gender”,“name”,“picture”

{
"data": [{
    "name": "XXX",
    "gender": "male",
    "id": "528814",
    "picture": {
        "data": {
            "is_silhouette": false,
            "url": "https:\/\/fbcdn-profile-a.akamaihd.net\/hprofile-ak-frc3\/v\/t1.0-1\/p50x50\/551182_10152227358459008__n.jpg?oh=983b70686285c2f60f71e665ace8ed5f&oe=54C1220C&__gda__=1422017140_998fbe013c4fe191ccadfdbc77693a76"
        }
    }
}

 string[] data = friendsData.Split(new string[] { "}," }, StringSplitOptions.RemoveEmptyEntries).ToArray();

            foreach (string d in data)
            {
                try
                {
                    FacebookFriend f = new FacebookFriend
                    {
                        id = d.Substring("\"id\":\"", "\""),
                        gender = d.Substring("gender\":\"", "\""),
                        name = d.Substring("name\":\"", "\""),
                        picture = d.Substring("\"picture\":{\"data\":{\"url\":\"", "\"").Replace(@"\", string.Empty)

                    };
                    FacebookFriendList.Add(f);
                }
                catch
                {
                    continue;
                }
            }

1 个答案:

答案 0 :(得分:1)

如果json数据发生变化,那么此代码看起来很糟糕,那么您需要相应地修改逻辑。我建议你使用Json序列化序列化和反序列化模型数据。

型号:

public class SerializationModel
{
    public Data Data { get; set; }
}


public class Data
{
    public string Name { get; set; }

    public string Gender { get; set; }

    public string Id { get; set; }

    public Picture Picture { get; set; }
}

public class Picture
{
    public PictureData Data { get; set; }
}

public class PictureData
{
    public bool is_silhouette { get; set; }

    public string url { get; set; }
}

序列化您的数据以获得json输出,如

SerializationModel serializationModel = new SerializationModel
          {
              Data = new Data
              {
                  Gender = "mALE",
                  Id = "88",
                  Name = "User",
                  Picture = new Picture
                  {
                      Data = new PictureData
                      {
                          is_silhouette = true,
                          url = "www.google.com"
                      }
                  }
              }
          };

        string serializedString = Newtonsoft.Json.JsonConvert.SerializeObject(serializationModel);

会产生以下结果,

{"Data":{"Name":"User","Gender":"mALE","Id":"88","Picture":{"Data":{"is_silhouette":true,"url":"www.google.com"}}}}

要将json数据反序列化回模型,

SerializationModel sm = Newtonsoft.Json.JsonConvert.DeserializeObject<SerializationModel>(serializedString);

然后,您可以从模型本身获取所需的值。