2017-04-21 42 views
0

下面的代码使用RestApi并且正在工作。 我想要做的是把变量topPlayer放在字符串"dani2"的地方。我在网上搜索,我发现的方式可能会影响字符串消息的结构,这必然是这样的。 你能否建议我如何把字符串消息中的变量topPlayer将一个变量放入用作json格式的字符串中

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!"); 
     } 
    } 
} 

回答

1

你的意思是这样吗?

string message = string.Format("{ \"message\": \"{0}\"}",topPlayer); 
+0

这是比我, –

+2

一个更可读的解决方案最外层的括号需要进行转义,以避免'FormatException':https://dotnetfiddle.net/ MLir1Z –

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))}\"}}"; 
相关问题