2011-02-09 13 views
5

Soy un principiante en Monotouch.
Me gustaría deserializar los datos de Json utilizando DataContractJsonSerializer. Pero no puedo hacer referencia a System.Runtime.Serialization.Json (solo .Formatters en System.Runtime.Serialization) en MonoDevelop. He hecho referencia a System.Runtime.Serialization. Mi configuración e instalación secuencias son: 1. iPhone SDK 4.2 2. Mono 2.8.2 (no la versión CSDK) 3. MonoTouch 3.2.4 Eval 4. MonoDevelop 2.4No se puede encontrar System.Runtime.Serialization.Json en MonoTouch

¿Cuál es el problema?

Respuesta

7

MonoTouch no incluye un DataContractJSonSerializer tan simple como este serializador se ve, trae un gran conjunto de bibliotecas.

Puede usar la API System.Json o puede probar la biblioteca JSon de NewtonSoft.

+0

Hola miguel, ¿estás seguro? Veo esta pregunta http://stackoverflow.com/questions/3516471/javascriptserializer-and-monodevelop y también leí el libro mencionado, pero finalmente Marcus usó DataContractJsonSerializer – NewComer

+0

No hay nada en esa publicación. –

+0

Aunque no estoy seguro de DataContractJsonSerializer en Monotouch, miguel me provocó. No lo hago con estos códigos // ----- datos de Json de parse ----- JsonArray jsonArray = JsonArray.Parse (responseBody) as JsonArray; Lista marcas = nueva Lista (); foreach (JsonObject jsonObject en jsonArray) { Marca de la marca = nueva Marca(); brand.ID = jsonObject ["BrandID"]; brand.Name = jsonObject ["Name"]; brand.Country = jsonObject ["País"]; brands.Add (marca); } – NewComer

0

Si eres como yo y está intentando utilizar DataContractJsonSerializer en una base de código de plataforma cruzada, es bastante fácil para envolver la API JSON.NET (también conocido como Newtonsoft.Json) en un 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(); 
    } 
} 
} 

Por supuesto, eso plantea la pregunta de por qué no cambiar a usar la API de JSON.NET en todas partes ... mi experiencia personal con esa API es que puede ser más lenta que usar DCJS (al menos en mis pruebas informales en Windows Phone).

Espero que ayude!

Cuestiones relacionadas