下面的代码正在使用RestApi并且正在运行。
我想要做的是将变量topPlayer
放在字符串"dani2"
处。我在网上搜索,我发现的方式可能会影响字符串消息的结构,这必然是这样的。
你能建议我如何将变量topPlayer
放在字符串消息中吗?
public class Test2 : MonoBehaviour, IInputClickHandler
{
[HideInInspector]
public string topPlayer = PlayerPrefs.GetString("TopPlayer");
public void OnInputClicked(InputClickedEventData eventData)
{
//UnityWebRequest request = UnityWebRequest.Post("https://hipchat.getconnected.it/v2/room/91/message", formData);
StartCoroutine(dani());
}
IEnumerator dani()
{
//string message = "{ \"message\": \"dani2\"}";
string message = "{ \"message\": \"topPlayer\"}";
UnityWebRequest request = UnityWebRequest.Post("https://hipchat.getconnected.it/xxx", message);
request.SetRequestHeader("authorization", "Bearer xxx");
request.SetRequestHeader("content-type", "application/json");
byte[] data = System.Text.Encoding.UTF8.GetBytes(message);
UploadHandlerRaw upHandler = new UploadHandlerRaw(data);
upHandler.contentType = "application/json";
request.uploadHandler = upHandler;
yield return request.Send();
if (request.isError)
{
Debug.Log(request.error);
}
else
{
Debug.Log("Form upload complete!");
}
}
}
答案 0 :(得分:2)
有几种方法可以将变量的值注入字符串中。适用于任何.NET版本的版本都使用String.Format
版本。
但是,您需要在注入变量之前转义变量的值,以避免产生无效的JSON,如{ "message": "a"b"}
(如果topPlayer
为a"b
)。 System.Web.HttpUtility.JavaScriptStringEncode
将帮助您逃避:
string message = string.Format("{{ \"message\": \"{0}\"}}",
System.Web.HttpUtility.JavaScriptStringEncode(topPlayer));
另请注意,最外侧的括号加倍({{ ... }}
)。这是因为单个括号对Format
函数具有特殊含义,因此必须通过加倍来转义它们。
从C#6.0开始,您也可以使用插值字符串:
string message = $"{{ \"message\": \"{System.Web.HttpUtility.JavaScriptStringEncode(topPlayer))}\"}}";
答案 1 :(得分:1)
你的意思是这样吗?
string message = string.Format("{ \"message\": \"{0}\"}",topPlayer);