【问题标题】:Cannot find System.Runtime.Serialization.Json in MonoTouch在 MonoTouch 中找不到 System.Runtime.Serialization.Json
【发布时间】:2011-02-09 05:10:31
【问题描述】:

我是 Monotouch 的初学者。
我想使用 DataContractJsonSerializer 反序列化 Json 数据。但是我不能在 MonoDevelop 中引用 System.Runtime.Serialization.Json(Only .Formatters under System.Runtime.Serialization)。我已经引用了 System.Runtime.Serialization。我的配置和安装顺序是: 1. iPhone SDK 4.2 2. Mono 2.8.2(非CSDK版本) 3. Monotouch 3.2.4 评估 4. MonoDevelop 2.4

有什么问题?

【问题讨论】:

    标签: .net iphone mono xamarin.ios monodevelop


    【解决方案1】:

    MonoTouch 没有附带 DataContractJSonSerializer,就像这个序列化器看起来那么简单,它带来了大量的库。

    您可以使用 System.Json API,也可以尝试 NewtonSoft 的 JSon 库。

    【讨论】:

    • 嗨米格尔,你确定吗?我看到这个问题stackoverflow.com/questions/3516471/… 并且我也阅读了提到的书,但马库斯最终使用了 DataContractJsonSerializer
    • 那个帖子里什么都没有。
    • 虽然不确定 Monotouch 中的 DataContractJsonSerializer,但 miguel 激发了我的灵感。我不使用这些代码 //-----parse Json data----- JsonArray jsonArray = JsonArray.Parse(responseBody) as JsonArray;列表 品牌=新列表(); foreach(JsonObject jsonObject in jsonArray) { Brand brand =new Brand(); brand.ID=jsonObject["BrandID"]; brand.Name=jsonObject["名称"];品牌.Country = jsonObject["Country"];品牌。添加(品牌); }
    • @Kenneth ~ 你……嗯……知道米格尔是谁吗?你可以试试看他的博客什么的。
    【解决方案2】:

    如果您像我一样尝试在跨平台代码库中使用 DataContractJsonSerializer,那么将 JSON.NET API(又名 Newtonsoft.Json)包装在 DataContractJsonSerializer 中很容易:

    using System;
    using System.IO;
    using System.Reflection;
    using Newtonsoft.Json;
    
    namespace System.Runtime.Serialization.Json
    {
    public class DataContractJsonSerializer
    {
        private Type type;
        private JsonSerializer js;
    
        public DataContractJsonSerializer (Type t)
        {
            this.type = t;
            this.js = new JsonSerializer();
        }
    
        public object ReadObject(Stream stream)
        {
            StreamReader reader = new StreamReader(stream);     
            return js.Deserialize(reader, type);
        }
    
        public void WriteObject(Stream stream, object o)
        {
            StreamWriter writer = new StreamWriter(stream);
            js.Serialize(writer, o);    
            writer.Flush ();
        }
    }
    }
    

    当然,这引出了一个问题,为什么不转而使用 JSON.NET API……我个人使用该 API 的经验是,它可能比使用 DCJS 慢(至少在我在 Windows Phone 上的非正式测试中) )。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      相关资源
      最近更新 更多