AtulSharma609 Ответов: 1

Как мы можем отсортировать строку запроса по имени ключа в C#


Я получил ответ на url-адрес
Как только я прочитаю ответ, я получу эту строку, как показано ниже

id=657ec95c439eb4a76e48c5ea7&amount=1&notify_status=success&currency=USD&time=20190403095815&reference=190403175800PTM03428&notify_id=D0000036639-a6d98e5d0a08d3e8850f&fields=id%2Camount%2Cnotify_status%2Ccurrency%2Ctime%2Creference%2Cnotify_id&sign=997b961b0541fb64b4c31096bc059055

Мне нужно укоротить эту строку, как показано ниже
сумма=1&валюта=USD& fields=id%2Camount%2Cnotify_status%2Ccurrency%2Ctime%2Creference%2Cnotify_id&id=657ec95c439eb4a76e48c5ea7&notify_id=D0000036639-a6d98e5d0a08d3e8850f &notify_status=success&reference=190403175800PTM03428&sign=997b961b0541fb64b4c31096bc059055&time=20190403095815

В принципе, мне нужны короткие ключи, и моя строка выглядит так: key1=value1&key2=value2&key3=value3

Ценю любую помощь

Что я уже пробовал:

string   requestJson = "id=657ec95c439eb4a76e48c5ea7&amount=1&notify_status=success&currency=USD&time=20190403095815&reference=190403175800PTM03428&notify_id=D0000036639-a6d98e5d0a08d3e8850f&fields=id%2Camount%2Cnotify_status%2Ccurrency%2Ctime%2Creference%2Cnotify_id&sign=997b961b0541fb64b4c31096bc059055";

            var list = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(requestJson);



            SortedDictionary<string, string> parameters = new SortedDictionary<string, string>();
            foreach (var term in list)
            {
                if (term.Key == "sign")
                    continue;

                parameters.Add(term.Key, term.Value);
            }

Mehdi Gholam

Почему?

Keith Barrow

JavaScriptSerializer.Метод Deserialize не собирается десериализовывать параметры запроса - он ожидает строку JSON. Решение OriginalGriff - это то, с чего я бы начал.

Кроме того, Мехди голам задает хороший вопрос - я не могу придумать веской причины, по которой вы хотели бы сделать это, кроме как в качестве упражнения. Это не значит, что нет веской причины, но хорошо задаться вопросом: "действительно ли я решаю правильную проблему".

1 Ответов

Рейтинг:
7

OriginalGriff

Возьмите свою строку и используйте Split, а затем отсортируйте массив:

string query = @"id = 657ec95c439eb4a76e48c5ea7 & amount = 1 & notify_status = success & currency = USD & time = 20190403095815 & reference = 190403175800PTM03428 & notify_id = D0000036639 - a6d98e5d0a08d3e8850f & fields = id % 2Camount % 2Cnotify_status % 2Ccurrency % 2Ctime % 2Creference % 2Cnotify_id & sign = 997b961b0541fb64b4c31096bc059055";
string trimmed = query.Replace(" & ", "&");
string[] queries = trimmed.Split('&');
queries = queries.Select(q => q.Trim()).OrderBy(q => q).ToArray();
Если бы не пробелы вокруг '&' в вашей исходной строке (которые, я думаю, вероятно, являются ложными), вы могли бы просто использовать Array.Sort:
string query = @"id = 657ec95c439eb4a76e48c5ea7 & amount = 1 & notify_status = success & currency = USD & time = 20190403095815 & reference = 190403175800PTM03428 & notify_id = D0000036639 - a6d98e5d0a08d3e8850f & fields = id % 2Camount % 2Cnotify_status % 2Ccurrency % 2Ctime % 2Creference % 2Cnotify_id & sign = 997b961b0541fb64b4c31096bc059055";
string[] queries = query.Split('&');
Array.Sort(queries);


MadMyche

Это действительно выглядит так, как будто пробелы являются ложными; обычно они были бы экранированы как %20. Вероятно, следует добавить url-адрес.decode

OriginalGriff

Или он напечатал его вместо copy'n'paste

MadMyche

ААА программисты.. копируйте и вставляйте то, чего они не понимают, а затем не копируйте и не вставляйте то, что нам нужно знать.

OriginalGriff

Я действительно иногда удивляюсь ... и постарайтесь больше не пользоваться самолетами ... :смеяться:

AtulSharma609

Большое вам спасибо за быстрый ответ

OriginalGriff

Всегда пожалуйста!