Unity C#JSONUtility不';t将值放入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

我一直在寻找,并试图自己解决这个问题,但就是没有看到。我是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());
    }
}
使用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;在SaveToStringReturns
json字符串:{}
中,不能在unity中序列化属性,只需保留
[SerializeField]私有字符串PlayerName;公共字符串playerName{get=>playerName;set=>playerName=value;
。虽然实际上c#命名约定应该是另一种方式..公共的大写名称,私有的小写..注释掉
{get,set}
取消对原始行的注释会导致堆栈溢出。您定义了两个PlayerName和一个private?PlayerName,这是您的问题。您在哪里分配
myObject.PlayerName=…
?另外..我想您的属性应该获取并设置
PlayerName
正确吗?目前它是递归实现的自动返回和设置自己……正确的,您有playerName和playerName,并且您从未分配给playerName