Как получить значение строки JSON?
-
09-10-2019 - |
Вопрос
var responseFromServer =
// lines split for readability
"{\"flag\":true,\"message\":\"\",\"result\":{\"ServicePermission\":true,"
+ "\"UserGroupPermission\":true}}";
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var responseValue = serializer.DeserializeObject(responseFromServer);
Значение ответа фрэмсервер - получить веб -сервис, а затем как получить строковое значение JSON, например, «Flag» , «ServicePermission» ??
Affix: Извините, используя C# для этого.
Решение
Примечание. Javascriptserializer на самом деле самый медленный сериализатор JSON, который я когда -либо испытывал. Так много мне пришлось удалить его из мои тесты Потому что это занимало слишком долго (> в 100 раз медленнее).
В любом случае это легко решается с помощью ServiceStack.text's JSON Serializer:
var response = JsonSerializer.DeserializeFromString<Dictionary<string,string>>(responseFromServer);
var permissions = JsonSerializer.DeserializeFromString<Dictionary<string,string>>(response["result"]);
Console.WriteLine(response["flag"] + ":" + permissions["ServicePermission"]);
Для полноты это также будет работать с ServiceStack.text.jsonserializer:
public class Response
{
public bool flag { get; set; }
public string message { get; set; }
public Permisions result { get; set; }
}
public class Permisions
{
public bool ServicePermission { get; set; }
public bool UserGroupPermission { get; set; }
}
var response = JsonSerializer.DeserializeFromString<Response>(responseFromServer);
Console.WriteLine(response.flag + ":" + response.result.ServicePermission);
Другие советы
if u are using jQuery u can do this
var json=jQuery.parseJSON(responseFromServer);
//acess
alert(json.ServicePermission);
if you are asing microsoft ajax do this
var json=Sys.Serialization.JavaScriptSerializer.deserialize(responseFromServer,true);
//acess
alert(json.ServicePermission);
В C#, как PHP, я не видел ни одного метода, который преобразует JSON для возражения на лету. Чтобы сделать преобразования в C#, вы должны сначала создать класс для этого.
Для вашего случая вы можете сделать это так
// определить классы
public class Response
{
public bool flag { get; set; }
public string message { get; set; }
public Permisions result { get; set; }
}
public class Permisions
{
public bool ServicePermission { get; set; }
public bool UserGroupPermission { get; set; }
}
var responseFromServer =
// lines split for readability
"{\"flag\":true,\"message\":\"\",\"result\":{\"ServicePermission\":true,"
+ "\"UserGroupPermission\":true}}";
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var responseValue = serializer.Deserialize<Response>(responseFromServer);
//access
responseValue.result.ServicePermission