首页 > 解决方案 > Unity C# JSONUtility 不在 JSON 字符串中赋值

问题描述

我一直在寻找,并试图自己解决这个问题,但只是没有看到。我是 C# 新手,这是我第一次接触 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"}

我做错了什么?我已经尝试了几乎所有我能想到的东西,我看到我输入的值正在进入调试日志,只是没有达到我需要的值。

标签: c#jsonunity3d

解决方案


我认为这可能只是整理 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());
    }
}

推荐阅读