【问题标题】:Unity Serializing object to JsonUnity将对象序列化为Json
【发布时间】:2018-09-02 23:48:49
【问题描述】:

我试图在 Unity 中简单地将对象序列化为 json。我找到了几篇关于这个主题的文章,但似乎没有任何效果。它不会直接抛出异常,但不会将对象转换为 json 字符串。我已经对这些进行了大量研究并尝试了各种样本。我不确定问题是类还是调用转换为 json 的逻辑。我可以使用 .net 轻松转换,但这是针对 MonoScript 中的 Unity,所以过程似乎有点不同。我假设当您将对象转换为 json 字符串时,它不应该将基数列为“null”。它还在转换后传入一个空的 json 字符串。

用户登录类:

    using UnityEngine;
using System.Collections;
using System;

[Serializable]
public class UserLogIn : MonoBehaviour
{
    public string Email;
    public string Password;
}

这是我在统一脚本中的代码:

private UserLogIn _LogIn = new UserLogIn();

    public void SetText(string text)
    {
        //[SerializeField]
        //UserLogIn _LogIn = new UserLogIn();
    //WhiteBoxGamingTestRequest();  
    _LogIn.Email = "testemail@gmail.com";
        _LogIn.Password = "12345";
        string json = JsonUtility.ToJson(_LogIn);
        Debug.Log(json);

        //User_LogIn(_login);

        //text = _bolResponse.ToString();
        //Text txt = transform.Find("Text").GetComponent<Text>();
        //txt.text = text;       
    }

我试过这个: Serialize and Deserialize Json and Json Array in Unity

似乎仍然无法正常工作。寻找建议或更正。

转换后 json = {} 应该是一个包含值的字符串。 Unity的json转换器坏了吗?

转换:

【问题讨论】:

  • 您使用的是c# 还是unityscript?正如stackoverflow.com/tags/unityscript/info 中所述,请勿使用此标记来描述 C# 中的 Unity 脚本:UnityScript 是一种单独的语言,只能用于使用该语言的问题。
  • 您遇到了什么问题?您提供了一个似乎是例外的屏幕截图,但除了说似乎没有任何工作之外没有解释问题。如果异常是问题所在,请edit 您的问题包含异常的完整ToString() 输出作为文本,而不是作为屏幕截图。原因请见Why not upload images of code on SO when asking a questionDiscourage screenshots of code and/or errors
  • 也不例外,但如果你看截图它没有转换为json字符串
  • 这是一个单声道脚本。它没有将对象转换为 json 字符串。没有错误只是转换对象失败。

标签: c# json unity3d


【解决方案1】:

我终于找到了答案。为了在 Unity 中创建一个可转换为 json 的对象,它似乎需要是一个常规的 c# 对象。我不确定你为什么不能使用 Mono Behavior,但这似乎是我课堂上的问题。所以我希望这对未来的其他人有所帮助,因为 Unity 网站就像泥泞一样清晰。

    [System.Serializable]
public class UserLogIn
{
    public string Email;
    public string Password;
}

这是 json 字符串转换后的样子:

{"Email":"testemail@gmail.com","Password":"12345"}

还想在7点43分左右感谢这个视频,你可以开始看到转换过程https://youtu.be/oJrAT8L4BrA

【讨论】:

  • 好吧,MonoBehaviour 是一个游戏对象的component -> 你不能使用new 创建一个游戏对象。相反,您必须使用Add 将其附加到场景中的游戏对象。但是由于您只想保存没有任何复杂行为的纯数据,因此您始终应该为此使用“普通”类。
  • Unity 内置插件不能很好地序列化。它们确实是序列化的,但是 Unity 使用它们来序列化的许多隐藏信息对于我们开发人员来说是不可见的。我们的想法是我们不应该序列化游戏对象和组件,而是重新生成它们所必需的数据。
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2016-12-22
  • 2021-09-09
  • 2018-07-20
  • 2021-12-16
相关资源
最近更新 更多