Как сериализовать слабый блок? в С#

Я сделал шаблон с помощью конструктора блоков Slack.

Я читаю некоторые данные и заполняю восемь параметров

в моем коде C# я должен использовать интерполированную строку и фигурные скобки для предоставления параметров {}. Мне также нужно пропустить фигурные скобки, добавив их дважды.

но это не распознается как правильный json, когда я делаю вызов почтового сообщения:

var data = new NameValueCollection();
data["token"] = token;
data["channel"] = channelName;
data["as_user"] = "true";           
data["text"] = postedMessage;
data["blocks"]=jsonstring; 
var client = new WebClient();
var response = client.UploadValues("https://slack.co/api/chat.postMessage", "POST", data);
string responseInString = Encoding.UTF8.GetString(response);
Console.WriteLine(responseInString);

Я понимаю, что правильный способ - представить эти блоки как классы. Я пытался следовать слабому представлению вложения, но блоки более сложны и содержат внутренние объекты, а не строковые переменные, как класс вложения. Благодарим вас за поддержку в представлении блоков с использованием простого синтаксиса и правильного json.

Хорошо, я перейду к примеру. Но смогу ли я включать переменные в свою строку json для заполнения параметров?

Coder 24.06.2019 22:14

Да, это возможно. Но это может быть сложно, потому что вам нужно будет экранировать некоторые символы в формате JSON, чтобы это работало, например. специальные символы в UTF-8

Erik Kalkoken 24.06.2019 22:17

см. официальную документацию о том, как это работает для JSON: json.org

Erik Kalkoken 24.06.2019 22:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
468
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина, по которой ваш код не работает, заключается в том, что в С# одинарные кавычки работают только для одиночных символов. Вот как правильно экранировать двойные кавычки и фигурные скобки JSON для жестко закодированных строковых констант.

обычные строковые константы

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

Пример:

string someJson = "{\"ErrorMessage\": \"\",\"ErrorDetails\": {\"ErrorID\": 111,\"Description\":{\"Short\": 0,\"Verbose\": 20},\"ErrorDate\": \"\"}}";

Есть и другие способы, как это сделать. См. этот вопрос для полного обзора решений.

Кстати. при таком подходе вам не нужно экранировать фигурные скобки.

интерполированные строковые константы

С интерполированной строкой вам также нужно избегать двойных кавычек. Но здесь это работает, удваивая их.

Пример:

string someJson = "{\"ErrorMessage\": \"\",\"ErrorDetails\": {\"ErrorID\": 111,\"Description\":{\"Short\": 0,\"Verbose\": 20},\"ErrorDate\": \"\"}}";

Для интерполированных строк вам также потребуется экранировать фигурные скобки. Это работает путем удвоения экранированных фигурных скобок, поскольку одинарные фигурные скобки используются для интерполяции.

Пример:

var json = $@"{{""name"":""{name}""}}";

См. также этот ответ для полного обсуждения того, как экранировать фигурные скобки.

Я добавлю обратную косую черту к каждой двойной кавычке, но как мне управлять фигурными скобками интерполяции? Строка someJson =$ "" \attribute:\"{variable1} "

Coder 24.06.2019 22:25

но если вам нужно, вы также можете избежать фигурных скобок внутри интерполированной строки. Позвольте мне добавить к ответу.

Erik Kalkoken 24.06.2019 22:32

Это сработало. Вы не представляете, как я ценю вашу поддержку. Возможно, мне нужно переписать вопрос, чтобы лучше решить проблему. большое спасибо, правда

Coder 24.06.2019 23:01

Другие вопросы по теме