¿Cómo tomo un objeto y lo convierto en una cadena JSON y luego regreso a ese objeto desde una cadena, específicamente, en WinRT para mi aplicación Metro de Windows 8?¿Cómo de/de serializo JSON en WinRT?
17
A
Respuesta
38
De esta manera:
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
public static T Deserialize<T>(string json)
{
var _Bytes = Encoding.Unicode.GetBytes(json);
using (MemoryStream _Stream = new MemoryStream(_Bytes))
{
var _Serializer = new DataContractJsonSerializer(typeof(T));
return (T)_Serializer.ReadObject(_Stream);
}
}
public static string Serialize(object instance)
{
using (MemoryStream _Stream = new MemoryStream())
{
var _Serializer = new DataContractJsonSerializer(instance.GetType());
_Serializer.WriteObject(_Stream, instance);
_Stream.Position = 0;
using (StreamReader _Reader = new StreamReader(_Stream))
{ return _Reader.ReadToEnd(); }
}
}
5
Primera generar las clases de C# con http://json2csharp.com/ A continuación, utilice http://james.newtonking.com/pages/json-net.aspx para analizar
Mi clase de usuario Actualmente tiene este aspecto:
public class User
{
public string id { get; set; }
public string username { get; set; }
public string full_name { get; set; }
public string profile_picture { get; set; }
public string bio { get; set; }
public string website { get; set; }
public Counts counts { get; set; }
public static User SingleFromJSON(string jsonString)
{
return JsonConvert.DeserializeObject<SingleUser>(jsonString).data;
}
public static User MultipleFromJSON(string jsonString)
{
return JsonConvert.DeserializeObject<SingleUser>(jsonString).data;
}
private class SingleUser
{
public User data { get; set; }
}
private class MultipleUsers
{
public List<User> data { get; set; }
}
}
public class Counts
{
public int media { get; set; }
public int follows { get; set; }
public int followed_by { get; set; }
}
Super fácil: D
+0
Esa es otra forma, seguro. No a todos les gustan las bibliotecas externas así. Pero json.net es muy respetado. (y rápido) –
Cuestiones relacionadas
- 1. ¿Cómo serializo JSON un diccionario de Python?
- 2. ¿Cómo serializo un tipo anónimo C# en una cadena JSON?
- 3. ¿Cómo serializo una matriz de objetos jQuery para JSON Post?
- 4. ¿Cómo serializo un objeto en un XDocument?
- 5. ¿Cómo serializo un objeto System.Windows.Media.Color en una cadena sRGB?
- 6. ¿Cómo serializo un objeto simple en sdk de iPhone?
- 7. System.Reflection.Assembly.GetExecutingAssembly() en WinRT
- 8. Cómo crear hashes SHA-256 en WinRT?
- 9. Cómo agregar una matriz en WinRT XAML
- 10. Creación de pestañas en WinRT
- 11. WinRT & Light temático
- 12. ¿Cómo serializo un valor enum como un int?
- 13. ¿Qué es un gráfico de objetos y cómo serializo uno?
- 14. WinRT - clientes TCP?
- 15. ¿Cómo enlaza JavaScript los eventos WinRT?
- 16. Cómo deshabilitar Windows 8/WinRT AppBar?
- 17. Cómo abrir un archivo empaquetado con WinRT
- 18. Macro para reconocer WinRT?
- 19. ¿Cómo puedo compilar sqlite para WinRT/ARM?
- 20. AppBarButtonSyle para WinRT
- 21. WinRT Reemplazo de System.Environment.TickCount
- 22. ¿Cómo configuramos los temporizadores en la aplicación WinRT?
- 23. ¿Cómo manejar las excepciones de WinRT que resultan en Excepción?
- 24. ¿Cómo obtener el lenguaje real en una aplicación WinRT?
- 25. ¿Cómo tener datos de DesignTime en WinRT XAML?
- 26. Cómo AZAR una imagen de fondo en WinRT?
- 27. WinRT/metro animación en código subyacente
- 28. Primitivas XAML en WinRT/Win8 Metro
- 29. Elementos seleccionados usando MVVM en WinRT
- 30. ¿Dónde está RadialGradientBrush en WinRT XAML?
DataContractJsonSerializer requiere que las clases y los miembros estén marcados con DataContract y DataMember. Json.net no. El primero es más seguro porque no todas las clases se pueden reconstruir por completo solo a partir de sus propiedades. Este último es más rápido porque no siempre se controlan los objetos que se serializan y la creación de una clase intermedia serializable requiere un poco más de tiempo. – Tristan