2017-04-21 4 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

:https://dotnetfiddle.net/ MLir1Z –

+2

よりも読みやすいソリューションです

string message = $"{{ \"message\": \"{System.Web.HttpUtility.JavaScriptStringEncode(topPlayer))}\"}}"; 

2

文字列に変数の値を挿入するには、いくつかの方法があります。 .NETバージョンに適したものはString.Formatバージョンを使用しています。

{ "message": "a"b"}topPlayera"bの場合)のような無効なJSONを避けるためには、注入する前に変数の値をエスケープする必要があります。 System.Web.HttpUtility.JavaScriptStringEncodeは、エスケープをお届けします。

string message = string.Format("{{ \"message\": \"{0}\"}}", 
    System.Web.HttpUtility.JavaScriptStringEncode(topPlayer)); 

も最も外側の括弧は({{ ... }})倍増していることに注意してください。これは、単一の中括弧がFormat関数にとって特別な意味を持つため、倍精度でエスケープする必要があるためです。

ので、C#6.0あなたはまた、補間された文字列を使用することがあります。

最も外側の括弧は `FormatException`を避けるためにエスケープする必要がある鉱山、
関連する問題