首页 > 学院 > 开发设计 > 正文

LitJson库中JsonMapper.ToJson中如果存在JsonData结构导致解析失败

2019-11-06 08:51:13
字体:
来源:转载
供稿:网友

发生异常的代码:

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
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表