我只想將陣列保存在 json 檔案中。但我不知道發生了什么事。在 dataUser.json 中只有“{}”
//test.cs
void Start() { Test(); }
void Test()
{
string[,] dataUser = new string[,]
{
{"NgocPhat", "03"},
{"PhatNgoc", "02"}
};
string json = JsonUtility.ToJson(dataUser, true);
File.WriteAllText(Application.dataPath "/dataUser.json", json);
}
輸出
//dataJson.json
{}
//https://i.stack.imgur.com/SRDHJ.png
uj5u.com熱心網友回復:
根據此處的 Unity 檔案,以下摘錄描述了您的問題:
在內部,此方法使用 Unity 序列化器;因此,您傳入的物件必須由序列化程式支持:它必須是 MonoBehaviour、ScriptableObject 或應用了 Serializable 屬性的普通類/結構。
這以一種微妙的方式告訴我們,Unity 序列化程式無法識別某些 .Net 可識別物件。這可以在 Unity Inspector 中看到,例如,如果您嘗試將string[,]欄位添加到 MonoBehaviour,您將不會在 Inspector 中看到它。
請注意,無論您如何裝飾它們,都不能序列化 astring[,]或 a 。Dictionary<Tk, Tv>根據經驗,如果您在 Inspector 中看不到它,您將無法對其進行序列化。
Unity JsonUtility serialsier 也有一些限制。您不能(反)序列化單個物件。它只會(反)序列化一個類或結構。
話雖如此,看起來您負責 JSON 格式,因此考慮到這一點,您可能想要執行以下操作:
[Serializable]
public class DataUser
{
public string name;
public string code;
}
[Serializable]
public class DataUsers
{
public DataUser [ ] users;
}
void Test()
{
var dataUsersClass = new DataUsers
{
users = new DataUser[]
{
new DataUser { name = "NgocPhat", code = "03"},
new DataUser { name = "PhatNgoc", code = "02"}
}
};
string json = JsonUtility.ToJson(dataUser, true);
File.WriteAllText(Application.dataPath "/dataUser.json", json);
}
結果應如下所示:
{
"users": [
{
"name": "NgocPhat",
"code": "03"
},
{
"name": "PhatNgoc",
"code": "02"
}
]
}
uj5u.com熱心網友回復:
從某人的評論鏈接的檔案可能指出了這個問題:
“在內部,此方法使用 Unity 序列化程式;因此,您傳入的物件必須由序列化程式支持:它必須是 MonoBehaviour、ScriptableObject 或應用了 Serializable 屬性的普通類/結構。”
我的猜測是基陣列類沒有該屬性?我認為陣列型別的屬性可以被序列化,但可能不是你這樣做的方式。
我猜解決方案是制作一個虛擬類來序列化,如下所示:
public class Dummy
{
[Serializable]
public string[,] Data { get; set; }
}
string[,] dataUser = new string[,]
{
{"NgocPhat", "03"},
{"PhatNgoc", "02"}
};
string json = JsonUtility.ToJson(new Dummy { Data = dataUser }, true);
僅供參考,這會將陣列嵌套在 JSON 的 Data 屬性中。
您也可以嘗試像 Newtonsoft.JSON 這樣的東西,它可能對您的原始代碼更加寬容。
uj5u.com熱心網友回復:
不確定這是否能準確回答您的問題。但是我一直在使用 json de & / 序列化一段時間,并且使用這種方法可以正常作業!
因此,首先您要將內容保存/寫入 json 檔案。(本例中的串列)
JsonSerializer serializer = new JsonSerializer();
serializer.Converters.Add(new JavaScriptDateTimeConverter());
serializer.NullValueHandling = NullValueHandling.Ignore;
using (StreamWriter sw = new StreamWriter(@"YOURPATH"))
using (JsonWriter writer = new JsonTextWriter(sw))
{
serializer.Serialize(writer, loaned); //loaned is the name of the list.
}
把它放在一個函式 Save() 中,然后呼叫它或任何方法 // 你想要的方式。
然后如果你想讀取json檔案中的資訊,//加載資料。
JsonSerializer serializer = new JsonSerializer();
serializer.Converters.Add(new JavaScriptDateTimeConverter());
serializer.NullValueHandling = NullValueHandling.Ignore;
using (StreamReader file = File.OpenText(@"YOURPATH"))
{
loaned = JsonConvert.DeserializeObject<List<Bok>>(File.ReadAllText(@"YOURPATH"));
serializer = new JsonSerializer();
loaned = (List<Bok>)serializer.Deserialize(file, typeof(List<Bok>)); //loaned = the list, and then the type list, and the class/object "Bok"
}
免責宣告:我不是專家,我相信還有更多的效果方法,但這個效果很好!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/519995.html
標籤:C#unity3d
