Unity C#JSONUtility不';t将值放入JSON字符串中
我一直在寻找,并试图自己解决这个问题,但就是没有看到。我是C#新手,这是我第一次接触JSON。我输入了以下代码:Unity C#JSONUtility不';t将值放入JSON字符串中,c#,json,unity3d,C#,Json,Unity3d,我一直在寻找,并试图自己解决这个问题,但就是没有看到。我是C#新手,这是我第一次接触JSON。我输入了以下代码: using System.Collections.Generic; using System.Collections; using System.Text; using System; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class IFScriptPlayerN
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());
}
}
使用System.Collections.Generic;
使用系统集合;
使用系统文本;
使用制度;
使用UnityEngine;
使用UnityEngine。联网;
使用UnityEngine.UI;
公共类IFScriptPlayerName:单行为
{
[可序列化]
公共类MyClass
{
//公共智力水平;
//公共浮动时间已过;
//公共字符串播放器名称;
//公共输入字段PlayerName;
//公共输入字段字符名;
//公共输入字段CharRank;
[SerializeField]专用字符串播放器名称;
公共字符串playerName{get{返回this.playerName;}
设置{this.playerName=value;}}
}
MyClass myObject=新的MyClass();
公共字符串播放器名称;
公共字符串SaveToString()
{
返回JsonUtility.ToJson(myObject);
}
void Start()
{
var input=gameObject.GetComponent();
var se=new InputField.SubmitEvent();
//se.AddListener(SubmitName);
//input.ONNEDEDIT=se;
//或者简单地使用下面的一行,
input.onendIt.AddListener(SubmitName);//这也适用
}
私有void SubmitName(字符串playerName)
{
//Debug.Log(arg0);
Debug.Log(“输入”+playerName);
//playerName=arg0;
Log(“启动SubmitName!”+SaveToString());
启动例行程序(Post(“https://mywebsite.com/api/api2.php,SaveToString());
}
IEnumerator帖子(字符串url、字符串bodyJsonString)
{
var请求=新UnityWebRequest(url,“POST”);
byte[]bodyRaw=Encoding.UTF8.GetBytes(bodyJsonString);
request.uploadHandler=(uploadHandler)新的UploadHandlerRaw(bodyRaw);
request.downloadHandler=(downloadHandler)new DownloadHandlerBuffer();
SetRequestHeader(“内容类型”、“应用程序/json”);
生成返回请求。Send();
Debug.Log(“状态代码:+request.responseCode”);
Log(“接收:”+request.downloadHandler.text);
Log(“json字符串:+SaveToString());
}
}
调试日志显示:json字符串:{“PlayerName”:“}
当我应该得到json字符串时:{“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());
}
}
公共类IFScriptPlayerName:MonoBehavior
{
[可序列化]
公共类MyClass
{
//公共智力水平;
//公共浮动时间已过;
//公共字符串播放器名称;
//公共输入字段PlayerName;
//公共输入字段字符名;
//公共输入字段CharRank;
[序列化字段]
公共字符串播放器名称{get;set;}
}
MyClass myObject=新的MyClass();
公共字符串播放器名称;
公共字符串SaveToString()
{
myObject.playerName=playerName;
返回JsonUtility.ToJson(myObject);
}
void Start()
{
var input=gameObject.GetComponent();
var se=new InputField.SubmitEvent();
//se.AddListener(SubmitName);
//input.ONNEDEDIT=se;
//或者简单地使用下面的一行,
input.onendIt.AddListener(SubmitName);//这也适用
}
私有void SubmitName(字符串playerName)
{
//Debug.Log(arg0);
Debug.Log(“输入”+playerName);
//playerName=arg0;
Log(“启动SubmitName!”+SaveToString());
启动例行程序(Post(“https://mywebsite.com/api/api2.php,SaveToString());
}
IEnumerator帖子(字符串url、字符串bodyJsonString)
{
var请求=新UnityWebRequest(url,“POST”);
byte[]bodyRaw=Encoding.UTF8.GetBytes(bodyJsonString);
request.uploadHandler=(uploadHandler)新的UploadHandlerRaw(bodyRaw);
request.downloadHandler=(downloadHandler)new DownloadHandlerBuffer();
SetRequestHeader(“内容类型”、“应用程序/json”);
生成返回请求。Send();
Debug.Log(“状态代码:+request.responseCode”);
Log(“接收:”+request.downloadHandler.text);
Log(“json字符串:+SaveToString());
}
}
你能花点时间解释或指出你改变了什么,以及为什么吗?当然抱歉,所以我整理了课程,然后添加了myObject.playerName=playerName;在SaveToStringReturnsjson字符串:{}
中,不能在unity中序列化属性,只需保留[SerializeField]私有字符串PlayerName;公共字符串playerName{get=>playerName;set=>playerName=value;
。虽然实际上c#命名约定应该是另一种方式..公共的大写名称,私有的小写..注释掉{get,set}
取消对原始行的注释会导致堆栈溢出。您定义了两个PlayerName和一个private?PlayerName,这是您的问题。您在哪里分配myObject.PlayerName=…
?另外..我想您的属性应该获取并设置PlayerName
正确吗?目前它是递归实现的自动返回和设置自己……正确的,您有playerName和playerName,并且您从未分配给playerName