Не удается найти System.Runtime.Serialization.Json в MonoTouch

Я новичок в 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

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


person NewComer    schedule 09.02.2011    source источник


Ответы (2)


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

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

person miguel.de.icaza    schedule 09.02.2011
comment
Привет, Мигель, Вы уверены? Я вижу этот вопрос stackoverflow.com/questions/3516471/, и я прочитал упомянутая книга также, но Маркус, наконец, использовал DataContractJsonSerializer - person NewComer; 09.02.2011
comment
В этом посте ничего нет. - person miguel.de.icaza; 10.02.2011
comment
Хотя я не уверен в DataContractJsonSerializer в Monotouch, Мигель меня зажег. Я не делаю этого с этим кодом // ----- анализировать данные Json ----- JsonArray jsonArray = JsonArray.Parse (responseBody) as JsonArray; Список ‹Brand› бренды = новый Список ‹Brand› (); foreach (JsonObject jsonObject в jsonArray) {Brand brand = new Brand (); brand.ID = jsonObject [BrandID]; brand.Name = jsonObject [Имя]; brand.Country = jsonObject [Страна]; brand.Add (бренд); } - person NewComer; 10.02.2011
comment
@Kenneth ~ Ты ... эм ... знаешь, кто такой Мигель? Вы можете попробовать почитать его блог или что-то в этом роде. - person jcolebrand; 10.02.2011

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

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

person Omri Gazitt    schedule 22.01.2012