zoukankan      html  css  js  c++  java
  • jQuery火箭图标返回顶部代码

    Newtonsoft.Json

    1、技术概述,描述这个技术是做什么?学习该技术的原因,技术的难点在哪里

    • 技术概述:Json.NET是一个开源的Json操作类库,Newtonsoft.Json是.Net中开源的Json序列化和反序列化工具
    • 学习该技术的原因:在前后台数据交互或者APP与后台交互的时候,通常使用Json进行数据交互,涉及到几个序列化对象的使用:DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET即 Newtonsoft.Json,一般选择性能以及通用性较好Json.NET,速度比 DataContractJsonSerializer 快 50%,比 JavaScriptSerializer 快 250%,以下为性能对比图:

    2、技术详述,描述你是如何实现和使用该技术的,要求配合代码和流程图详细描述。可以再细分多个点,分开描述各个部分

    3、技术使用中遇到的问题和解决过程。要求问题的描述和解决有一定的内容,不能草草概括。要让遇到相关问题的人看了你的博客之后能够解决该问题

    • Newtonsoft.Json版本不一致问题解决
    • 问题描述:A程序集引用了 Newtonsoft.Json 6.0程序集,B程序集引用了 Newtonsoft.Json 10.0程序集,此时A引用B,就会报:发现同一依赖程序集的不同版本间存在无法解决的冲突 这一警告,执行程序就会报错–System.IO.FileNotFoundException: 未能加载文件或程序集Newtonsoft.Json xx.x的错误
    • 问题分析:这是因为依赖顺序引起的。A引用了B,首先会先生成B,而B引用了 Newtonsoft.Json 10.0,那么VS就会将源引用文件(Newtonsoft.Json 10.0)复制到B程序集同一目录(bin/Debug)下,名为Newtonsoft.Json.dll文件,其内嵌程序集版本为10.0。然后A引用了B,所以会将B程序集和B程序集的依赖项10.0(Newtonsoft.Json.dll)给复制到A的程序集目录下,而A又引用了Newtonsoft.Json 6.0程序集文件,所以又将6.0的dll文件给复制到自己程序集目录下。因为两个Newtonsoft.Json.dll重名,所以直接覆盖了前者,那么只保留了Newtonsoft.Json 6.0。当我们调用Func方法中的B.FuncB()时候,CLR会搜索B程序集,找到后再调用 return Newtonsoft.Json.Obj 这行代码,而这行代码又用到了Newtonsoft.Json程序集,接下来CLR搜索Newtonsoft.Json.dll,文件名称满足,接下来CLR判断其标识,发现版本号是6.0,与B程序集清单里注册的10.0版本不符,故而才会报出异常:未能加载文件或程序集Newtonsoft.Json 10.0。
    • 解决方案:
      • 1、通过bindingRedirect节点重定向,即当找到10.0的版本时,给定向到6.0版本
        <runtime>
             <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                  <dependentAssembly>
                       <assemblyIdentity name="Newtonsoft.Json"
                                         publicKeyToken="30ad4fe6b2a6aeed"
                                         culture="neutral" />
                       <bindingRedirect oldVersion="10.0.0.0"
                                        newVersion="6.0.0.0" />
                  </dependentAssembly>
             </assemblyBinding>
        </runtime>
      
      • 2、对每个版本指定codeBase路径,然后分别放上不同版本的程序集,这样就可以加载两个相同的程序集
        <runtime>
            <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Newtonsoft.Json"
                                  publicKeyToken="30ad4fe6b2a6aeed"
                                  culture="neutral" />
                <codeBase version="6.0.0.0"
                          href="E:6.0Newtonsoft.Json.dll" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Newtonsoft.Json"
                                  publicKeyToken="30ad4fe6b2a6aeed"
                                  culture="neutral" />
                <codeBase version="10.0.0.0"
                          href="E:10.0Newtonsoft.Json.dll" />
            </dependentAssembly>
            </assemblyBinding>
        </runtime>
      

    4、进行总结
      Newtonsoft.Json 涉及的内容不少,由于多因素限制,对于该知识的学习是浅尝辄止,仅接触了皮毛( 官网 )。知识的学习需要坚持,要有专研的精神。当自己不深入学习的时候,对一些事情的判断就可能有失偏颇,如果想让自己把技术运用的得心应手,就要深入进去,了解其里,才能有所得。不然就只能做到知其然不知其所以然,仅仅懂得去套代码而不能理解。

    5、列出参考文献、参考博客(标题、作者、链接)

  • 相关阅读:
    jQery总结01
    抽象类和接口精华
    JS基础之开篇
    HTML常见元素集锦
    bzoj3626 [LNOI2014]LCA
    bzoj3223 Tyvj 1729 文艺平衡树
    bzoj3196 Tyvj 1730 二逼平衡树
    bzoj3295 [Cqoi2011]动态逆序对
    bzoj3514 Codechef MARCH14 GERALD07加强版
    bzoj3932 [CQOI2015]任务查询系统
  • 原文地址:https://www.cnblogs.com/dongbo-221701313/p/13188940.html
Copyright © 2011-2022 走看看