- Curso
- Serialización de datos
- DataContractJsonSerializer: Serializar objetos
DataContractJsonSerializer: Serializar objetos
Última actualización:
23/08/2020
⁃
Dificultad:
Intermedio
Crea un programa en C# que serializar y deserializar objetos en formato JSON. Para ello puede utilizar la clase DataContractJsonSerializer
incluida en el espacio de nombres System.Runtime.Serialization
.
Primero implementa una clase Persona con tres propiedades (Nombre, Edad y Ciudad). La clase Ciudad tendrá dos propiedades (Nombre y Población). Luego crea un objeto persona y utiliza el serializador del objeto DataContractJsonSerializer
para guardar los datos en un archivo.json, más tarde, deserializa el archivo.json y imprímelo en pantalla. Recuerde preparar un método ToString()
para imprimir la clase Persona.
Entrada
Salida
Solución
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
public class JSONDataContractJsonSerializer
{
static string nameFile = "out.json";
public static void Main(string[] args)
{
Persona person = new Persona()
{
Nombre = "Nauj",
Edad = 26,
Ciudad = new Ciudad()
{
Nombre = "Spain",
Poblacion = 13456766
}
};
Serializar(person);
person = Deserializar();
Console.WriteLine(person.ToString());
}
public static void Serializar(Persona p)
{
DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Persona));
using (MemoryStream msObj = new MemoryStream())
{
js.WriteObject(msObj, p);
msObj.Position = 0;
using (StreamReader sr = new StreamReader(msObj))
{
string json = sr.ReadToEnd();
File.WriteAllText(nameFile, json);
}
}
}
public static Persona Deserializar()
{
DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Persona));
Persona persona;
string json = File.ReadAllText(nameFile);
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
persona = (Persona)js.ReadObject(ms);
}
return persona;
}
[DataContract]
public class Persona
{
[DataMember]
public string Nombre { get; set; }
[DataMember]
public int Edad { get; set; }
[DataMember]
public Ciudad Ciudad { get; set; }
public override string ToString()
{
StringBuilder str = new StringBuilder();
str.AppendLine("Nombre: " + Nombre);
str.AppendLine("Edad: " + Edad);
str.AppendLine("Ciudad: " + Ciudad.Nombre);
return str.ToString();
}
}
[DataContract]
public class Ciudad
{
[DataMember]
public string Nombre { get; set; }
[DataMember]
public int Poblacion { get; set; }
}
}