public class ArenaBask{ public int Id; public string value; public JsonData Dic;}public class EncodeDemo{ public void Run() { string jsonStr = "{'Id':5658, 'value':'CCCC', 'Dic':{'a':123, 'b':'cdc'}}"; JsonReader reader = new JsonReader(jsonStr); ArenaBask bask = JsonMapper.ToObject<ArenaBask>(reader); Console.WriteLine(JsonMapper.ToJson(bask)); }}当JsonMapper.ToJson时发生错误.原因:
JsonMapper中使用JsonWriter来序列化对象,本来每个key对应一个value,在读到key的时候writer中的context会将ExpectingValue字段置为true,表明接下来应当写入一个值,但是JsonMapper中的WriteValue函数中,将IJsonWrapper接口对象给特殊处理了,走另外一个方式了:
if (obj is IJsonWrapper) { if (writer_is_PRivate) writer.TextWriter.Write(((IJsonWrapper)obj).ToJson()); else ((IJsonWrapper)obj).ToJson(writer); return; }导致writer.context.ExpectingValue没有及时置回false,导致异常报错.解决方案:
去掉关于writer_is_private的判断,看了代码觉得这好像没什么用,修改为以下这个样子:if (obj is IJsonWrapper) { ((IJsonWrapper)obj).ToJson(writer); return; }该github分支是个人及项目中使用的一些功能升级及一些bug的维护.https://github.com/JunC74/litjson
新闻热点
疑难解答