【问题标题】:How to serialize slack block? in C#如何序列化松弛块?在 C# 中
【发布时间】:2019-06-25 22:52:48
【问题描述】:

我使用 Slack block kit builder 制作了一个模板

我读取了一些数据并填写了八个参数

在我的 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);

我理解正确的方法是将这些块表示为 classes 。我试图遵循松弛附件表示,但块更复杂,包含内部对象而不是字符串变量作为附件类。感谢您支持使用简单的语法和正确的 json 来表示块

【问题讨论】:

  • 好的,我来看看这个例子。但是我可以在我的 json 字符串中包含变量来填充参数吗?
  • 是的,这是可能的。但这可能很棘手,因为您需要以 JSON 方式转义一些字符才能使其工作,例如UTF-8 中的特殊字符
  • 有关 JSON 如何工作的官方文档请参阅此文档:json.org

标签: c# json slack


【解决方案1】:

您的代码不起作用的原因是在 C# 中单引号仅适用于单个字符。以下是如何为硬编码字符串常量正确转义 JSON 的双引号和大括号。

普通字符串常量

要正确转义代码中的硬编码 JSON,您需要在 JSON 字符串的每个双引号中添加一个反斜杠。

示例

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

还有其他方法可以做到这一点。有关解决方案的完整概述,请参阅 this question

顺便说一句。在这种方法中,您不需要转义大括号。

内插字符串常量

使用插值字符串,您还需要转义双引号。但在这里它通过将它们加倍来工作。

示例

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

对于插值字符串,您还需要转义大括号。这是通过将转义的大括号加倍来实现的,因为单个大括号用于插值。

示例

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

另请参阅this answer,了解有关如何转义大括号的完整讨论。

【讨论】:

  • 我会在每个双引号中添加反斜杠,但是如何管理插值大括号?字符串 someJson =$“”\attribute:\“{variable1}”
  • 但如果必须,您也可以在插值字符串中转义大括号。让我补充一下答案。
  • 成功了。你不知道我多么感谢你的支持。也许我需要重新编写问题以更好地解决问题。真的非常感谢你
猜你喜欢
  • 2022-01-27
  • 1970-01-01
  • 2023-02-13
  • 2022-08-06
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多