Litjson的官网地址:litjson.net
Unity开发中需要对服务器传来的json字符串进行解析显示,这部分首先想到的是用开源库Litjson进行处理。
Invalid character '
在拿到服务器发来的字符串进行解密处理后得到string类型数据后,使用Litjson进行解析:
LitJson.JsonData jsonData = LitJson.JsonMapper.ToObject(msg);
这一步在项目运行时遇到报错:LitJson.JsonException: Invalid character '
原因是由于有的协议在解密处理转换为c#的字符串string时,会在末尾有一个'\0'字符;
LitJson库实现时考虑不周全,没有考虑到字符‘\0’的关系;LitJson可能认为一个c#字符串中不应该包含’/0’,所以他没有处理这种情况,对于不能处理的字符他抛出了一个异常。
另外,对于不能处理的字符,Litjson应该会将出错字符的日志打印出来,比如 LitJson.JsonException: Invalid character 'v' in input string;
所以正常这部分出错应该会打出这样的日志:LitJson.JsonException: Invalid character '\0' in input string;但是由于'\0'在打印的时候会截断后面的日志,所以只显示了LitJson.JsonException: Invalid character ' 。
解决方案
若使用Litjson源码的话,可以在Lexer.cs中,在
private static bool State1 (FsmContext ctx) 函数的switch处理中,添加上 :
case '\0':
return true;
然后再继续使用LitJson.JsonData jsonData = LitJson.JsonMapper.ToObject(msg); 就不会报错了;
网友评论