Как десериализовать ответ Jsonp в разделенную строку - PullRequest
0 голосов
/ 22 октября 2019
var responseData = await response.Content.ReadAsStringAsync();
var msg = JsonConvert.DeserializeObject<string>(responseData);
string[] result = msg.Split(',');
string statuscode = result[0];
string RRR = result[1];
string status = result[2];

Приведенный выше код показывает мой ответ после отправки запроса в API с responseData как jsonp ({"statuscode":"025","RRR":"260007663696","status":"Payment Reference generated"}) Когда я запустил код, я получил сообщение об ошибке, в котором сообщалось о var msg = JsonConvert.DeserializeObject<string>(responseData);

Как мне преобразовать мой ответ jsonp в значения разделенных строк?

Ответы [ 3 ]

1 голос
/ 22 октября 2019

Ваша полезная нагрузка JSON представляет собой объект с 3 свойствами. Я рекомендую создать класс, который представляет этот объект, чтобы вы могли сериализовать / десериализовать:

public class SomeObject  //Rename to something more fitting
{
    public string StatusCode {get;set;}
    public string RRR {get;set;}
    public string Status {get;set;}
}

Затем, когда вы десерализуете, используйте этот новый класс в качестве универсального параметра (а не string, как вы делаете сейчас):

var someObj = JsonConvert.DeserializeObject<SomeObject>(json);

Теперь вы можете получить доступ к свойствам, как и к любому другому экземпляру:

Console.WriteLine(someObj.Status);
// etc, etc

Скрипка здесь

0 голосов
/ 22 октября 2019

Вы можете использовать Regex для преобразования JSONP в JSON, удалив внешнюю функцию и извлекая только JSON в скобках:

var jsonp = "jsonp({ \"statuscode\":\"025\",\"RRR\":\"260007663696\",\"status\":\"Payment Reference generated\"})";
var jsonMatch = Regex.Match(jsonp, @"\((?<json>.*)\)");
var json = jsonMatch.Groups["json"].Value;

После этого вы можете десериализовать, используя предпочитаемый вами метод. с библиотекой JSON.Net. Вот один из способов использования пространства имен Newtonsoft.Json.Linq:

var token = JToken.Parse(json);
var status = token["status"].Value<string>();
var statusCode = token["statuscode"].Value<string>();
var rr = token["RRR"].Value<string>();
0 голосов
/ 22 октября 2019

Если вы не создаете класс для десериализации вашего JSON, вы можете преобразовать свой JSON в динамический объект и получить свободный доступ к свойствам:

dynamic result = JObject.Parse(responseData);
string statuscode = result.statuscode;
string RRR = result.RRR;
string status = result.status;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...