在MonoTouch中找不到System.Runtime.Serialization.Json

时间:2011-02-09 05:10:32

标签: .net iphone mono xamarin.ios monodevelop

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

有什么问题?

2 个答案:

答案 0 :(得分:7)

MonoTouch不附带DataContractJSonSerializer,就像这个序列化程序看起来一样简单,它带来了大量的库。

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

答案 1 :(得分:0)

如果您像我一样并且正在尝试在跨平台代码库中使用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的非正式测试中) )。

希望有所帮助!