统一C#JSON赢得';是否序列化私有2D数组?
我创建了一个自定义类,需要将其序列化为json文件以保存。 我得到了它,这样它就可以写入文件,但除非我将数组标记为public,否则它不会序列化数据,只会保存一个(大部分)空白文件统一C#JSON赢得';是否序列化私有2D数组?,c#,json,unity3d,serialization,private,C#,Json,Unity3d,Serialization,Private,我创建了一个自定义类,需要将其序列化为json文件以保存。 我得到了它,这样它就可以写入文件,但除非我将数组标记为public,否则它不会序列化数据,只会保存一个(大部分)空白文件 using System; using System.IO; using UnityEngine; [Serializable] public class SettingsData { [SerializeField] int[,] schedule = new int[7,24]; //stores
using System;
using System.IO;
using UnityEngine;
[Serializable]
public class SettingsData
{
[SerializeField] int[,] schedule = new int[7,24]; //stores the each hour in a 2D array [day,hour]
public void Save()
{
string jsn = JsonUtility.ToJson(this);
string path = Application.persistentDataPath + "/settings.json";
Debug.Log(path);
File.WriteAllText(path, jsn);
}
}
它吐出的是:
{}
我想让它吐出来的是:
{"schedule":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]}
我尝试过其他JSON序列化程序(neuecc/Utf8Json和Newtonsoft.JSON),但这些都不起作用
我试着把它做成一维数组而不是二维数组,但没有成功
我甚至把函数移到了类之外,以防它是“(this)”把它搞砸了,它不是
公开确实有效,但我希望这是私人的
如何在不公开的情况下使其序列化?1D私有数组可以序列化
[可序列化]
公共类JsonDataTest
{
[序列化字段]
私有整数[,]计划=新整数[7,24];
[序列化字段]
私人INTA=3;
[序列化字段]
私有列表b=新列表();
[序列化字段]
私有整数[]c=新整数[9];
公共作废保存()
{
字符串jsn=JsonUtility.ToJson(this);
Log($“json字符串:{jsn}”);
}
}
日志:
您可以使用MonoBehavior,如下所示:
公共类序列化测试:MonoBehavior
{
[序列化字段]
私有整数[,]计划=新整数[7,24];
[序列化字段]
私人INTA=3;
[序列化字段]
私有列表b=新列表();
[序列化字段]
私有整数[]c=新整数[9];
}
检查哪一个可以序列化。1D专用数组可以序列化
[可序列化]
公共类JsonDataTest
{
[序列化字段]
私有整数[,]计划=新整数[7,24];
[序列化字段]
私人INTA=3;
[序列化字段]
私有列表b=新列表();
[序列化字段]
私有整数[]c=新整数[9];
公共作废保存()
{
字符串jsn=JsonUtility.ToJson(this);
Log($“json字符串:{jsn}”);
}
}
日志:
您可以使用MonoBehavior,如下所示:
公共类序列化测试:MonoBehavior
{
[序列化字段]
私有整数[,]计划=新整数[7,24];
[序列化字段]
私人INTA=3;
[序列化字段]
私有列表b=新列表();
[序列化字段]
私有整数[]c=新整数[9];
}
检查哪一个可以序列化。从:
这基本上意味着您不能序列化任何无法在monobehavior中序列化的内容
Netonsoft的Json.net支持这一点,您需要做两件事:
[JsonObject]
[JsonProperty]
[JsonObject]
[JsonProperty]
我不习惯使用unity json UTIL,但通常在这种情况下,我会创建一个单独的json文件模型类,其中包含用于序列化的公共属性。我不习惯使用unity json UTIL,但通常在这种情况下,我会创建一个单独的json文件模型类,其中包含用于序列化的公共属性
json string:{"a":3,"b":[],"c":[0,0,0,0,0,0,0,0]}
Internally, this method uses the Unity serializer; therefore the object you pass in must be supported by the serializer: it must be a MonoBehaviour, ScriptableObject, or plain class/struct with the Serializable attribute applied. The types of fields that you want to be included must be supported by the serializer; unsupported fields will be ignored, as will private fields, static fields, and fields with the NonSerialized attribute applied.