Unity C# JSONUtility не помещает значение в строку JSON - PullRequest
0 голосов
/ 06 февраля 2020

Я искал и пытался решить это сам, но просто не вижу этого. Я новичок в C#, и это мой первый bru sh с JSON. Я вставил следующий код:

using System.Collections.Generic;
using System.Collections;
using System.Text;
using System;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class IFScriptPlayerName : MonoBehaviour

{

    [Serializable]
    public class MyClass
    {
        //public int level;
        //public float timeElapsed;
        //public string playerName;
        //public InputField PlayerName;
        //public InputField CharName;
        //public InputField CharRank;

   [SerializeField] private string PlayerName;
    public string playerName {  get { return this.playerName; }
                       set { this.playerName = value; } }

    }

    MyClass myObject = new MyClass();

    public string playerName;


    public string SaveToString()
    {
        return JsonUtility.ToJson(myObject);
    }

    void Start()
    {
        var input = gameObject.GetComponent<InputField>();
        var se = new InputField.SubmitEvent();
        //se.AddListener(SubmitName);
        //input.onEndEdit = se;

        //or simply use the line below, 
        input.onEndEdit.AddListener(SubmitName);  // This also works
    }

    private void SubmitName(string playerName)
    {
        //Debug.Log(arg0);
    Debug.Log("Entered" + playerName);

    //playerName = arg0;
    Debug.Log ("Start SubmitName!" + SaveToString());

    StartCoroutine(Post("https://mywebsite.com/api/api2.php", SaveToString()));
    }

    IEnumerator Post(string url, string bodyJsonString)
    {
        var request = new UnityWebRequest(url, "POST");
        byte[] bodyRaw = Encoding.UTF8.GetBytes(bodyJsonString);
        request.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw);
        request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
        request.SetRequestHeader("Content-Type", "application/json");

        yield return request.Send();

        Debug.Log("Status Code: " + request.responseCode);
    Debug.Log("Received: " + request.downloadHandler.text);
    Debug.Log("json string: " + SaveToString());
    }
}

, и журнал отладки показывает: json string: {"PlayerName":""} когда я должен получить json string: {"PlayerName":"MarkNoBerg"}

Что я делаю неправильно? Я перепробовал практически все, что мог придумать, и я вижу, что введенное мной значение попадает в журнал отладки, а не достигает того значения, которое мне нужно.

1 Ответ

0 голосов
/ 06 февраля 2020

Я думаю, что это может быть просто приведение в порядок MyClass и присвоение переменной классу?

public class IFScriptPlayerName : MonoBehaviour

{

    [Serializable]
    public class MyClass
    {
        //public int level;
        //public float timeElapsed;
        //public string playerName;
        //public InputField PlayerName;
        //public InputField CharName;
        //public InputField CharRank;

   [SerializeField]
    public string playerName {  get; set; }

    }

    MyClass myObject = new MyClass();

    public string playerName;


    public string SaveToString()
    {
       myObject.playerName = playerName;
        return JsonUtility.ToJson(myObject);
    }

    void Start()
    {
        var input = gameObject.GetComponent<InputField>();
        var se = new InputField.SubmitEvent();
        //se.AddListener(SubmitName);
        //input.onEndEdit = se;

        //or simply use the line below, 
        input.onEndEdit.AddListener(SubmitName);  // This also works
    }

    private void SubmitName(string playerName)
    {
        //Debug.Log(arg0);
    Debug.Log("Entered" + playerName);

    //playerName = arg0;
    Debug.Log ("Start SubmitName!" + SaveToString());

    StartCoroutine(Post("https://mywebsite.com/api/api2.php", SaveToString()));
    }

    IEnumerator Post(string url, string bodyJsonString)
    {
        var request = new UnityWebRequest(url, "POST");
        byte[] bodyRaw = Encoding.UTF8.GetBytes(bodyJsonString);
        request.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw);
        request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
        request.SetRequestHeader("Content-Type", "application/json");

        yield return request.Send();

        Debug.Log("Status Code: " + request.responseCode);
    Debug.Log("Received: " + request.downloadHandler.text);
    Debug.Log("json string: " + SaveToString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...