在 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 数据。

posted @ 2011-09-25 22:39  张志敏  阅读(2604)  评论(0编辑  收藏  举报