Litjson的官網(wǎng)地址:litjson.net
Unity開發(fā)中需要對服務(wù)器傳來的json字符串進(jìn)行解析顯示烂瘫,這部分首先想到的是用開源庫Litjson進(jìn)行處理柔逼。
Invalid character '
在拿到服務(wù)器發(fā)來的字符串進(jìn)行解密處理后得到string類型數(shù)據(jù)后粘室,使用Litjson進(jìn)行解析:
LitJson.JsonData jsonData = LitJson.JsonMapper.ToObject(msg);
這一步在項(xiàng)目運(yùn)行時(shí)遇到報(bào)錯:LitJson.JsonException: Invalid character '
原因是由于有的協(xié)議在解密處理轉(zhuǎn)換為c#的字符串string時(shí),會在末尾有一個'\0'字符熟史;
LitJson庫實(shí)現(xiàn)時(shí)考慮不周全氧映,沒有考慮到字符‘\0’的關(guān)系;LitJson可能認(rèn)為一個c#字符串中不應(yīng)該包含’/0’褐缠,所以他沒有處理這種情況政鼠,對于不能處理的字符他拋出了一個異常。
另外队魏,對于不能處理的字符公般,Litjson應(yīng)該會將出錯字符的日志打印出來万搔,比如 LitJson.JsonException: Invalid character 'v' in input string;
所以正常這部分出錯應(yīng)該會打出這樣的日志:LitJson.JsonException: Invalid character '\0' in input string官帘;但是由于'\0'在打印的時(shí)候會截?cái)嗪竺娴娜罩舅脖ⅲ灾伙@示了LitJson.JsonException: Invalid character ' 。
解決方案
若使用Litjson源碼的話刽虹,可以在Lexer.cs中酗捌,在
private static bool State1 (FsmContext ctx) 函數(shù)的switch處理中,添加上 :
case '\0':
return true;
然后再繼續(xù)使用LitJson.JsonData jsonData = LitJson.JsonMapper.ToObject(msg); 就不會報(bào)錯了涌哲;