在 MonoTouch 中使用 Newtonsoft.Json
一直在项目中使用 Newtonsoft.Json 作为服务端的 Json 数据序列化工具, 现在使用 MonoTouch 做 iOS 开发, 自然会选择用 Newtonsoft.Json 来反序列化服务端返回的 Json 数据。
Newtonsoft.Json 没有提供对 MonoTouch 的版本, 因此需要从源代码编译 NJson 。
- 从 NJson 的 CodePlex 主页下载最新版本的源代码。
- 在源代码的 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;
- 在 Mac 系统下, 用 MonoDevelop 新建一个 MonoTouch 类库项目, 项目名称为 Newtonsoft.Json.MonoTouch, 然后关闭 MonoTouch ;
- 用文本编辑器打开 Newtonsoft.Json.MonoTouch.csproj 和 Newtonsoft.Json.Net35.csproj 两个文件, 将 Newtonsoft.Json.Net35.csproj 文件中所有的 <Compile Include="*.cs" /> 复制到 Newtonsoft.Json.MonoTouch.csproj 文件中对应的位置, 然后保存 Newtonsoft.Json.MonoTouch.csproj 文件。
- 再用 MonoDevelop 打开 Newtonsoft.Json.MonoTouch.csproj 项目, 打开项目属性对话框, 添加两个编译选项 WINDOWS_PHONE 和 SILVERLIGHT , 并将项目的输出文件改为 Newtonsoft.Json.MonoTouch ;
- 在项目中添加下列类型的定义文件, 因为这些 Newtonsoft.Json 引用到这些类型, 但是 MonoTouch 下没有这些类型:
- System.ComponentModel.AddingNewEventHandler
- System.ComponentModel.AddingNewEventArgs
- System.ComponentModel.PropertyChangingEventHandler
- System.ComponentModel.INotifyPropertyChanging
- System.ComponentModel.PropertyChangingEventArgs
- 如果不出什么意外的话, 现在可以在 MonoTouch 下编译出 Newtonsoft.Json 了。
经过测试, 这样编译出的 NJson 在 MonoTouch 保留了NJon 绝大部分功能, 可以正常的反序列化服务端的 JSON 数据。
张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。
本博客已经迁移到 GitHub , 围观地址: https://beginor.github.io/