当前位置: 首页 > news >正文

在 MonoTouch 中使用 Newtonsoft.Json

一直在项目中使用 Newtonsoft.Json 作为服务端的 Json 数据序列化工具, 现在使用 MonoTouch 做 iOS 开发, 自然会选择用 Newtonsoft.Json 来反序列化服务端返回的 Json 数据。

Newtonsoft.Json 没有提供对 MonoTouch 的版本, 因此需要从源代码编译 NJson 。

  1. 从 NJson 的 CodePlex 主页下载最新版本的源代码。
  2. 在源代码的 Src\NewtonSoft.Json 目录下, 有这样的几个项目文件:
    • Newtonsoft.Json.Net20.csproj 对应 .Net 2.0 平台下的 NJson ;
    • Newtonsoft.Json.Net35.csproj 对应 .Net 3.5 平台下的 NJson ;
    • Newtonsoft.Json.Silverlight.csproj 对应 Silverlight 平台下的 NJson ;
    • Newtonsoft.Json.csproj 对应 .Net 4.0 平台下的 NJson ;
    • Newtonsoft.Json.WindowsPhone.csproj 对应 WP7 平台下的 NJson;
  3. 在 Mac 系统下, 用 MonoDevelop 新建一个 MonoTouch 类库项目, 项目名称为 Newtonsoft.Json.MonoTouch, 然后关闭 MonoTouch ;
  4. 用文本编辑器打开 Newtonsoft.Json.MonoTouch.csproj 和 Newtonsoft.Json.Net35.csproj 两个文件, 将 Newtonsoft.Json.Net35.csproj 文件中所有的 <Compile Include="*.cs" /> 复制到 Newtonsoft.Json.MonoTouch.csproj  文件中对应的位置, 然后保存 Newtonsoft.Json.MonoTouch.csproj 文件。
  5. 再用 MonoDevelop 打开 Newtonsoft.Json.MonoTouch.csproj 项目, 打开项目属性对话框, 添加两个编译选项 WINDOWS_PHONE 和 SILVERLIGHT ,  并将项目的输出文件改为 Newtonsoft.Json.MonoTouch ;
  6. 在项目中添加下列类型的定义文件, 因为这些 Newtonsoft.Json 引用到这些类型, 但是 MonoTouch 下没有这些类型:
    • System.ComponentModel.AddingNewEventHandler
    • System.ComponentModel.AddingNewEventArgs
    • System.ComponentModel.PropertyChangingEventHandler
    • System.ComponentModel.INotifyPropertyChanging
    • System.ComponentModel.PropertyChangingEventArgs
    这些类型通过查阅 MSDN 或者用 ILSpy 很容易确定它们是怎么定义的;
  7. 如果不出什么意外的话, 现在可以在 MonoTouch 下编译出 Newtonsoft.Json 了。

经过测试, 这样编译出的 NJson 在 MonoTouch 保留了NJon 绝大部分功能, 可以正常的反序列化服务端的 JSON 数据。

转载于:https://www.cnblogs.com/beginor/archive/2011/09/25/2190545.html

相关文章:

  • ubuntu札记之一个没有技术含量的虚拟终端的问题
  • ruby文件操作大全
  • MySQL管理员指南之--MySQL用户管理
  • Object-c 一些代码规范
  • t-sql导出EXCEL语句--待测试
  • 冷月枫林
  • PHP 计算程序运行的时间
  • 文本框自动撑高JQ插件
  • 11.23 IBeamMDAAMembershipProvider 是什么?如何使用?
  • C# WinForm开发系列 - File
  • XML中Xpath语法的使用
  • 9、如何控制框架页面或iframe内嵌页面在指定页面(区域)打开页面? [除了div+css,框架页面也不能忘记]...
  • POJ3590 The shuffle Problem——置换群+DP/递推预处理
  • 生成excel控制类
  • jdk和tomcat环境变量配置
  • __proto__ 和 prototype的关系
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 10个确保微服务与容器安全的最佳实践
  • Angular 响应式表单 基础例子
  • CEF与代理
  • CSS盒模型深入
  • Docker容器管理
  • emacs初体验
  • IP路由与转发
  • JavaScript设计模式与开发实践系列之策略模式
  • js操作时间(持续更新)
  • laravel5.5 视图共享数据
  • Spring Boot MyBatis配置多种数据库
  • Vultr 教程目录
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 大主子表关联的性能优化方法
  • 区块链技术特点之去中心化特性
  • 少走弯路,给Java 1~5 年程序员的建议
  • 通过git安装npm私有模块
  • 消息队列系列二(IOT中消息队列的应用)
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (七)Knockout 创建自定义绑定
  • (三)docker:Dockerfile构建容器运行jar包
  • (三)终结任务
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)插入排序
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转) Face-Resources
  • (转)创业家杂志:UCWEB天使第一步
  • (转)利用ant在Mac 下自动化打包签名Android程序