SimpleJSON Unity异常:反序列化JSON时出错.未知标签:123
本文关键字:未知 出错 标签 JSON Unity 异常 反序列化 SimpleJSON | 更新日期: 2023-09-27 18:19:54
从json文件访问数据时出现此错误。
我正在努力遵循以下教程:http://wiki.unity3d.com/index.php/SimpleJSON
并创建了一个test.json文件,我想从中提取数据,其中包含:
{
"version": "1.0",
"data": {
"sampleArray": [
"string value",
5,
{
"name": "sub object"
}
]
}
}
在Unity中使用以下代码:
void LoadFiles()
{
FileInfo f = m_info[0]; //Array of Files in Folder
// I had a foreach loop here, but wanted to specify the file for testing before I tried to parse through one of my own
print("I Found : " + f);
var N = JSONNode.LoadFromFile(f.FullName);
var versionString = N["version"].Value; // versionString will be a string containing "1.0"
var versionNumber = N["version"].AsFloat; // versionNumber will be a float containing 1.0
var name = N["data"]["sampleArray"][2]["name"];// name will be a string containing "sub object"
print("vs=" + versionString + " vn=" + versionNumber + " name=" + name);
}
我得到的只是未知标签,来自我从来源收集的:
public static JSONNode Deserialize(System.IO.BinaryReader aReader)
{
JSONBinaryTag type = (JSONBinaryTag)aReader.ReadByte();
switch(type)
{
case JSONBinaryTag.Array:
{
int count = aReader.ReadInt32();
JSONArray tmp = new JSONArray();
for(int i = 0; i < count; i++)
tmp.Add(Deserialize(aReader));
return tmp;
}
case JSONBinaryTag.Class:
{
int count = aReader.ReadInt32();
JSONClass tmp = new JSONClass();
for(int i = 0; i < count; i++)
{
string key = aReader.ReadString();
var val = Deserialize(aReader);
tmp.Add(key, val);
}
return tmp;
}
case JSONBinaryTag.Value:
{
return new JSONData(aReader.ReadString());
}
case JSONBinaryTag.IntValue:
{
return new JSONData(aReader.ReadInt32());
}
case JSONBinaryTag.DoubleValue:
{
return new JSONData(aReader.ReadDouble());
}
case JSONBinaryTag.BoolValue:
{
return new JSONData(aReader.ReadBoolean());
}
case JSONBinaryTag.FloatValue:
{
return new JSONData(aReader.ReadSingle());
}
default:
{
throw new Exception("Error deserializing JSON. Unknown tag: " + type);
}
}
}
我一直在切换,但使用.Value或.AsFoat,我应该符合这些case语句。知道发生了什么吗,这是Unity 5.0的旧代码吗?
我似乎是在假装,JSON文件就像XML,文本,看起来不是,或者至少SimpleJson在读取文件时假设它是二进制的。我试着把"文本"写到一个文件中,然后阅读,效果很好。所以这是一个错误,我假设例子中的数据是文本。
JSONNode.LoadFromFile函数改为JSONNode.Parse(字符串)将流转换为字符串
System.IO.FileStream fs = System.IO.File.OpenRead(f.FullName);
long length = fs.Length;
byte[] stream = new byte[length];
fs.Read(stream, 0, (int)length);
string json = System.Text.Encoding.UTF8.GetString(stream);
var N = JSONNode.Parse(json);