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原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。
  • 相关阅读:
    SpringBoot自定义HttpMessageConverter
    第一次使用Linux服务器所栽之坑
    入门Nginx
    HttpClient中的Timout
    SpringBoot启动
    SpringBoot注解
    百度2017春招笔试
    学习JUnit
    Mybatis中的@SelectKey注解
    PHP中MD5函数漏洞
  • 原文地址:https://www.cnblogs.com/newsea/p/1673468.html
Copyright © 2011-2022 走看看