我想加载一个保存为base64的字符串,但我总是收到此错误。我正在使用SimpleJson类(http://wiki.unity3d.com/index.php/SimpleJSON):
异常:反序列化JSON时出错。未知标签:66 SimpleJSON.JSONNode.Deserialize(System.IO.BinaryReader aReader)(在Assets / plugins / SimpleJSON.cs:512)
我的代码:
var I = new JSONClass();
I["author"]["name"] = "testName";
I["author2"]["name2"] = "testName2";
string str = I.SaveToCompressedBase64();
//output : QlpoOTFBWSZTWdFZTaIAAAdNgH/gEAAA etc.
//#Error deserializing JSON
string res = JSONClass.LoadFromBase64( str );//.ToString();
以下是该类的方法:
public static JSONNode LoadFromBase64(string aBase64)
{
var tmp = System.Convert.FromBase64String(aBase64);
var stream = new System.IO.MemoryStream(tmp);
stream.Position = 0;
return LoadFromStream(stream);
}
public static JSONNode LoadFromStream(System.IO.Stream aData)
{
using(var R = new System.IO.BinaryReader(aData))
{
return Deserialize(R);
}
}
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);
}
}
}
由于
答案 0 :(得分:1)
您遇到的问题是您尝试在此处保存为compressedbase64string:
string str = I.SaveToCompressedBase64();
当您尝试解析并解压缩时会给您带来麻烦。所以,我建议你使用他们的SaveToBase64()
如下“
string str = I.SaveToBase64();
保持程序的其余部分不变(除非我没有看到另一个错误)。
另一种方法是使用他们的LoadFromCompressedBase64()
,因此除了以下情况之外,您的代码看起来一样:
string res = JSONClass.LoadFromCompressedBase64( str );//.ToString();