Не удается найти System.Runtime.Serialization.Json в MonoTouch - PullRequest
5 голосов
/ 09 февраля 2011

Я новичок в Monotouch.
Я хотел бы десериализовать данные Json с помощью DataContractJsonSerializer. Но я не могу сослаться на System.Runtime.Serialization.Json (только .Formatters под System.Runtime.Serialization) в MonoDevelop. Я ссылался на System.Runtime.Serialization. Мои конфигурации и последовательности установки: 1. iPhone SDK 4.2 2. Mono 2.8.2 (не версия CSDK) 3. Monotouch 3.2.4 Eval 4. MonoDevelop 2.4

В чем проблема?

Ответы [ 2 ]

7 голосов
/ 09 февраля 2011

MonoTouch не поставляется с DataContractJSonSerializer так просто, как выглядит этот сериализатор, он содержит большой набор библиотек.

Вы можете использовать либо System.Json API, либо попробовать библиотеку JSon от NewtonSoft.

0 голосов
/ 22 января 2012

Если вы похожи на меня и пытаетесь использовать 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).

Надеюсь, это поможет!

...