如何序列化松弛块?在 C#
How to serialize slack block? in C#
我使用 Slack block kit builder 制作了一个模板
我读了一些数据,填了八个参数
在我的 C# 代码中,我必须使用内插字符串和大括号来提供参数 {}。我还需要通过添加两次来跳过大括号。
但是当我进行 post 消息调用时,这不被认为是正确的 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 。我试图遵循松弛的附件表示,但块更复杂,包含内部对象而不是字符串变量作为附件 class 。感谢您支持使用简单语法和正确 json
表示块
您的代码不起作用的原因是在 C# 中,单引号仅适用于单个字符。以下是如何为 hard-coded 字符串常量正确转义 JSON 的双引号和大括号。
普通字符串常量
要在代码中正确转义 hard-coded 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。
我使用 Slack block kit builder 制作了一个模板
我读了一些数据,填了八个参数
在我的 C# 代码中,我必须使用内插字符串和大括号来提供参数 {}。我还需要通过添加两次来跳过大括号。
但是当我进行 post 消息调用时,这不被认为是正确的 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 。我试图遵循松弛的附件表示,但块更复杂,包含内部对象而不是字符串变量作为附件 class 。感谢您支持使用简单语法和正确 json
表示块您的代码不起作用的原因是在 C# 中,单引号仅适用于单个字符。以下是如何为 hard-coded 字符串常量正确转义 JSON 的双引号和大括号。
普通字符串常量
要在代码中正确转义 hard-coded 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。