Синтаксический анализ значения из потока веб-ответов http

#c# #json #httpwebresponse

#c# #json #httpwebresponse

Вопрос:

У меня есть поток httpwebresponse в этом формате в виде строки.

 {"totalUsersCount":
[{"AccountStatus":1,"TotalUsers":53,"MemberUsers":33,"CrimsonUsers":20},
{"AccountStatus":2,"TotalUsers":7,"MemberUsers":7,"CrimsonUsers":0},
{"AccountStatus":3,"TotalUsers":44,"MemberUsers":37,"CrimsonUsers":7},
{"AccountStatus":6,"TotalUsers":28718,"MemberUsers":28718,"CrimsonUsers":0},
{"AccountStatus":5,"TotalUsers":3,"MemberUsers":3,"CrimsonUsers":0}]}
 

Я бы хотел проанализировать значение totalUsersCount в одиночку, чтобы получить проанализированный результат в этом формате

 [{"AccountStatus":1,"TotalUsers":53,"MemberUsers":33,"CrimsonUsers":20},
{"AccountStatus":2,"TotalUsers":7,"MemberUsers":7,"CrimsonUsers":0},
{"AccountStatus":3,"TotalUsers":44,"MemberUsers":37,"CrimsonUsers":7},       
{"AccountStatus":6,"TotalUsers":28718,"MemberUsers":28718,"CrimsonUsers":0},
{"AccountStatus":5,"TotalUsers":3,"MemberUsers":3,"CrimsonUsers":0}]
 

Если результат в формате json, мы могли бы легко разобрать его. Но этот результат находится в строковом формате. Я попытался преобразовать строку в json с помощью Json.parse, а затем применить синтаксический анализ json. Но это не помогло. Может быть, я не пробовал это правильно. Кто-нибудь может помочь?

Комментарии:

1. Как это не помогло? Что произошло? Какой код вы написали?

2. james.newtonking.com/json/help/index.html?topic=html/…

Ответ №1:

Легко использовать Json.Net . Просто объявите свои конкретные классы, а затем десериализуйте.

 var root = JsonConvert.DeserializeObject<RootObject>(yourJsonString);

foreach (var item in root.TotalUsersCount)
{
    Console.WriteLine(item.AccountStatus);
}

var allusers = root.TotalUsersCount.Sum(u => u.TotalUsers);
 

 public class TotalUsersCount
{
    public int AccountStatus { get; set; }
    public int TotalUsers { get; set; }
    public int MemberUsers { get; set; }
    public int CrimsonUsers { get; set; }
}

public class RootObject
{
    public List<TotalUsersCount> TotalUsersCount { get; set; }
}
 

Вы также можете использовать встроенный System.Web.Script.Serialization.JavaScriptSerializer

 var root = new JavaScriptSerializer().Deserialize<RootObject>(yourJsonString);
 

Ответ №2:

Я думаю, вам нужно использовать JSON.NET . Это лучше, чем любая другая библиотека для Json.

Если у вас есть строка, десериализуйте ее следующим образом

 JsonObject obj = JsonConvert.DeserializeObject(stringToPass);
 

Это предоставит вам JSONObject, поскольку вы работаете с JSONArrays, попробуйте это

 JsonArray arr = JsonConvert.DeserializeObject(stringToPass); 
// should start with [
 

Для получения дополнительной информации от разработчика перейдите сюда: http://james.newtonking.com/json