[英]how get all elements of array in deserialize json c#?
在C#中,我有5到6天的時間,我想嘗試在一個站點上使用api。 我已經反序列化JSON,這是格式
[{“ uid”:1476402,“ first_name”:“ ”,“ last_name”:“ ”,“ domain”:“ sandrische”,“ online”:1,“ user_id”:1476402},{“ uid”:3813182, “ first_name”:“ ”,“ last_name”:“ ”,“ domain”:“ id3813182”,“ online”:0,“ user_id”:3813182},{“ uid”:12789624,“ first_name”:“ ”,“ last_name“:” “,” domain“:” id12789624“,” online“:0,” user_id“:12789624}]
有一個課
public class vkResponse
{
[JsonProperty(PropertyName = "uid")]
public int Id { get; set; }
[JsonProperty(PropertyName = "first_name")]
public string FirstName { get; set; }
[JsonProperty(PropertyName = "last_name")]
public string LastName { get; set; }
[JsonProperty(PropertyName = "photo_50")]
public Uri PhotoUri { get; set; }
[JsonProperty(PropertyName = "online")]
[JsonConverter(typeof(BoolConverter))]
public bool IsOnline { get; set; }
[JsonProperty(PropertyName = "lists")]
public List<int> Lists { get; set; }
}
public class BoolConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(((bool)value) ? 1 : 0);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return reader.Value.ToString() == "1";
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(bool);
}
}
我想獲得身份證
var req = new HttpRequest();
string resp = req.Get("https://api.vk.com/method/friends.get?user_ids=1&fields=domain&access_token=" + GetToken()).ToString();
JObject o = JObject.Parse(resp);
JArray array = (JArray)o["response"];
vkResponse v = JsonConvert.DeserializeObject<vkResponse>(array.First().ToString());
richTextBox1.Text = v.Id.ToString();
但是我只獲得第一個ID,如何獲得所有ID? 我認為這個array.First().ToString()
? 請幫忙或舉一個例子。
var v = JsonConvert.DeserializeObject<IEnumerable<vkResponse>>(array.ToString());
var userids = v.Select(x=>x.id);
您的響應是vkResponse
類的數組,因此您可以將其反序列化為c#數組 :
vkResponse[] vkResponses = JsonConvert.DeserializeObject<vkResponse[]>(array.ToString());
一旦有了數組,您就可以循環訪問每個元素的ID。
請給我一個示例,說明如何循環訪問每個元素的ID
好的,這是使用基本c#循環構造和數組來實現的一種方法:
vkResponse[] vkResponses = JsonConvert.DeserializeObject<vkResponse[]>(array.ToString());
if (vkResponses == null)
throw new JsonException();
int [] ids = new int[vkResponses.Length];
for (int i = 0; i < vkResponses.Length; i++)
{
ids[i] = vkResponses[i].Id;
}
如果要在富文本框中將ID顯示為以逗號分隔的整數序列,請使用以下方法生成字符串:
public static string ExtractVkResponseIds(string vkResponseJson)
{
vkResponse[] vkResponses = JsonConvert.DeserializeObject<vkResponse[]>(vkResponseJson);
if (vkResponses == null)
throw new JsonException();
StringBuilder sb = new StringBuilder();
// Format the ids as a comma separated string.
foreach (var response in vkResponses)
{
if (sb.Length > 0)
sb.Append(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator);
sb.Append(response.Id.ToString());
}
return sb.ToString();
}
並這樣稱呼:
var req = new HttpRequest();
string resp = req.Get("https://api.vk.com/method/friends.get?user_ids=1&fields=domain&access_token=" + GetToken()).ToString();
JObject o = JObject.Parse(resp);
JArray array = (JArray)o["response"];
string ids = ExtractVkResponseIds(array.ToString());
richTextBox1.Text = ids;
順便說一下,我使用了本地化的ListSeparator ,這在您的語言中可能不是逗號。 您可以根據需要將其更改為文字逗號。
順便說一下,您的示例Json字符串缺少右括號(“]”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.