将变量放在用作json格式的字符串中

时间:2017-04-21 14:43:15

标签: c# string variables

下面的代码正在使用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!");
        }
    }
}

2 个答案:

答案 0 :(得分:2)

有几种方法可以将变量的值注入字符串中。适用于任何.NET版本的版本都使用String.Format版本。

但是,您需要在注入变量之前转义变量的值,以避免产生无效的JSON,如{ "message": "a"b"}(如果topPlayera"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);