c# - 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"}
我做错了什么?我已经尝试了几乎所有我能想到的东西,我看到我输入的值正在进入调试日志,只是没有达到我需要的值。
解决方案
我认为这可能只是整理 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());
}
}
推荐阅读
- swift - 表格中各部分之间的间距
- bash - 崇高的终端命令行创建产生多个错误
- google-sheets - 基于两列标准的 Google 表格中的排名和数组公式
- c# - C#中的字符串处理
- python - 尝试在 python 中比较不同类的两个属性,得到错误“TypeError: list indices must be integers or slices, not Sheep”
- python - 使用正则表达式捕获文本,直到第一次出现新行
- sql - sqlite 将 SELECT 更改为 DELETE
- javascript - 如何排除特定版本的 npm 包?
- algorithm - 经典Cracking the Coding Interview的运行时间a^3 + b^3 = c^3 + d^3?
- reactjs - 使用反应钩子从子组件更新父数组数据