zoukankan      html  css  js  c++  java
  • Newtonsoft.Json 修改记录

    1.Newtonsoft.Json 可以反序列 但不能反序列化 KeyValuePaire<TKey,TValue> , 是因为:

    KeyValuePaire 的两个属性 Key , Value  都是只读的.且,没有默认构造函数.

    在文件:Newtonsoft.Json\Newtonsoft.Json\Utilities\ReflectionUtils.cs 里有一个函数:HasDefaultConstructor 作者的判断里有: 只要是值类型,就会有默认构造函数. 这是不对的.

    去掉 下面这两句:

        if (t.IsValueType)
            return true;

    2.对于 具有属性 (Attribute) Browsable = false 是不用序列化的.

    \Utilities\ReflectionUtils.cs  (GetFieldsAndProperties 487行后添加)

    代码
    for (int i =0; i < targetMembers.Count; i++)
    {
    MemberInfo member
    = targetMembers[i];
    object[] objs = member.GetCustomAttributes(typeof(BrowsableAttribute), true);
    if (objs !=null&& objs.Length >0)
    {
    if ((objs[0] as BrowsableAttribute).Browsable ==false)
    {
    targetMembers.RemoveAt(i);
    i
    --;
    }
    }
    }

    3. DateTime序列化错误:

    \JsonWriter.cs (WriteValue)  修改 1036行

    代码
    case TypeCode.DateTime:
    string dtValue ="";
    DateTime
    ? dt = convertible as DateTime?;
    if (dt.HasValue ==false)
    {
    return;
    }
    if (dt.Value.Hour ==0&& dt.Value.Minute ==0&& dt.Value.Second ==0)
    {
    dtValue
    = dt.Value.ToShortDateString();
    }
    elseif (dt.Value.Year ==0&& dt.Value.Month ==0&& dt.Value.Day ==0)
    {
    dtValue
    = dt.Value.ToShortTimeString();
    }
    else dtValue = dt.Value.ToString();
    WriteValue(dtValue);
    return;

    4.循环引用自己的问题。

    \JsonSerializer.cs  (WriteMemberInfoProperty)  838 行: 修改

    case ReferenceLoopHandling.Error:
                                return;

    再狠点:\JsonSerializer.cs   (SerializeObject) 879 行。 添加:

                if (writer.SerializeStack.Count > 0 && writer.SerializeStack[0].GetType() == value.GetType()) return;

     会生成:带有属性名和空值的自循环体。

    alarm   作者:NewSea     出处:http://newsea.cnblogs.com/    QQ,MSN:iamnewsea@hotmail.com

      如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。
  • 相关阅读:
    有关远程设置的问题
    QT使用tableWidget显示双排列表 而且选中用红框圈出来
    一个程序猿的跨洋找工作分享
    linux块设备的IO调度算法和回写机制
    基于servlet实现一个web框架
    Java中的条件编译(转)
    Android NDK 使用第三方静态库(转)
    Android 使用动态库或静态库来编译生成动态库(转)
    Android应用运行过程(转)
    android NDK编译(导入).a文件和编译多个so文件(转)
  • 原文地址:https://www.cnblogs.com/newsea/p/1673468.html
Copyright © 2011-2022 走看看