我想加載一個保存爲base64的字符串,但我總是得到這個錯誤。我正在使用SimpleJson類(http://wiki.unity3d.com/index.php/SimpleJSON):反序列化JSON(字符串/ base64)錯誤?
異常:反序列化JSON時出錯。未知標籤:66 SimpleJSON.JSONNode.Deserialize(System.IO.BinaryReader aReader)(在資產/插件/ 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);
}
}
}
感謝
您試圖解析字符串,壓縮解壓縮嘗試以base64嘗試解析它之前的字符串。 – rdodev
@rdodev謝謝,你能告訴我該怎麼做嗎?我嘗試'var base64 = System.Convert.FromBase64String(str);'但似乎沒有辦法做到這一點。 – Paul
我在下面的答案應該有所幫助。 – rdodev