Autor
|
Tema: ¿Cuál es el mejor archivo para guardar y recuperar datos? (Leído 5,457 veces)
|
Meta
|
Hola: Antes usaba muchos el XML para guardar y leer datos que tenía en el formulario. Por ejemplo en este caso. using System; using System.Windows.Forms; using System.Xml;
namespace Guardar_y_cargar_datos_en_archivo_xml { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
// Guarda los datos introducidos a parte de crear el archivo "miXML.xml". private void button_Guardar_Click(object sender, EventArgs e) { XmlWriter w = XmlWriter.Create("miXML.xml"); w.WriteStartElement("MiInfo"); w.WriteElementString("TextBox", textBox1.Text); w.WriteElementString("CheckBox", checkBox1.Checked.ToString()); w.WriteElementString("radioButton1", radioButton1.Checked.ToString()); w.WriteElementString("radioButton2", radioButton2.Checked.ToString()); w.WriteEndElement(); w.Close(); }
private void Form1_Load(object sender, EventArgs e) { try { XmlReader r = XmlReader.Create("miXML.xml"); r.ReadStartElement("MiInfo"); textBox1.Text = r.ReadElementContentAsString(); checkBox1.Checked = Convert.ToBoolean(r.ReadElementContentAsString()); radioButton1.Checked = Convert.ToBoolean(r.ReadElementContentAsString()); radioButton2.Checked = Convert.ToBoolean(r.ReadElementContentAsString()); r.ReadEndElement(); r.Close(); } catch (Exception) {
// }
} } } El archivo se genera en el disco duro o SSD hoy en día y pone esto. <MiInfo> <TextBox>Texto y textos</TextBox> <CheckBox>True</CheckBox> <radioButton1>False</radioButton1> <radioButton2>True</radioButton2> </MiInfo> Me funciona de maravilla para lo que es el XML y me lo recomendaron en este foro hace años, desde el 2.008. Ahora, veo mucho con el santo JSON. ¿Es recomendable usar el JSON? Si es cierto o no. Quiero hacer el mismo ejemplo de recuperar y guardar datos como se hizo el XML. Saludos.
|
|
|
En línea
|
|
|
|
Locura_23
Desconectado
Mensajes: 162
|
Bueno para estos casos es mejor revisar las recomendaciones de Microsoft en su documentación... Pero tengo entendido que JSON es muy utilizado actualmente, aunque XML también persiste. No es el caso de BinaryFormatter por ejemplo, que está obsoleto y no recomendado, debido a las vulnerabilidades que tiene.
|
|
|
En línea
|
|
|
|
**Aincrad**
|
No sabria decirte, pero en mi caso yo siempre uso JSON . Puedes usar la popular libreria : Newtonsoft.Json , aunque yo siempre uso la que te suministra el .net framework 'System.Web.Extensions' (JavaScriptSerializer)
|
|
|
En línea
|
|
|
|
Meta
|
Gracias por responder. Y unas preguntas que hago. 1. En Visual Studio Community 2022 tiene su propio XML dentro sin usar librerías externas. ¿A estas alturas hay qué usar librerías externas para JSON? 2. Mi propuesta es hacer el mismo ejemplo del primer post que está hecho con xml. Lo que puse en el formulario es, un checBox, dos radioButton y un textBox y un Button para guadar datos que introduzco, le doy al botón Guardar, si no encuentra un archivo.xml, lo crea y guarda los datos. Al abrir el programa, localiza el archivo.xml con sus datos guardados y los lee, al final, los datos leídos se muestra en Windows Form como indica arriba y funciona de maravilla. ¿Pueden ayudarme hacer el mismo ejemplo pero en json? Muchas gracias.
|
|
|
En línea
|
|
|
|
Meta
|
Diferencia en XML y JSON. En XML se me guarda así. <?xml version="1.0" encoding="utf-8"?> <MiInfo> <TextBox>Hola.</TextBox> <CheckBox>True</CheckBox> <radioButton1_Luz_ON>False</radioButton1_Luz_ON> <radioButton2_Luz_OFF>True</radioButton2_Luz_OFF> </MiInfo>
Deduzco que en JSON sería así. { "MiInfo": { "TextBox": "Hola.", "CheckBox": "True", "radioButton1_Luz_ON": "False", "radioButton2_Luz_OFF": "True" } }
A parte que se nota más legible para el humano, tiene menor peso. Solo me toca aprender como se guarda y lee archivos json.
|
|
|
En línea
|
|
|
|
Meta
|
Intento guardar datos pero me da errores. System.IO.DirectoryNotFoundException: 'Could not find a part of the path 'C:\temp\Ejemplo.json'.' using Newtonsoft.Json; namespace Guardar_y_cargar_datos_en_archivo.json_.NET_7._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } class MiInfo { public string? TextBox { get; set; } public bool CheckBox { get; set; } public bool RadioButton1_Luz_ON { get; set; } public bool RadioButton1_Luz_OFF { get; set; } } void SalvarDatos() { { TextBox = this.textBox1.Text, RadioButton1_Luz_ON = this.radioButton1.Checked, RadioButton1_Luz_OFF = this.radioButton2.Checked }; try { Directory.CreateDirectory(@"C:\temp"); string serializado = JsonConvert.SerializeObject(miInfo); File.WriteAllText(@"C:\temp\Ejemplo.json", serializado); } catch { } } void RecuperarDatos() { string serializado = File.ReadAllText(@"C:\temp\Ejemplo.json"); MiInfo miInfo = (MiInfo)JsonConvert.DeserializeObject(serializado); this.textBox1.Text = miInfo.TextBox; this.checkBox1.Checked = miInfo .CheckBox; this.radioButton1.Checked = miInfo .RadioButton1_Luz_ON; this.radioButton2.Checked = miInfo .RadioButton1_Luz_OFF; } private void button_Guardar_Click(object sender, EventArgs e) { SalvarDatos(); } private void Form1_Load(object sender, EventArgs e) { RecuperarDatos(); } } }
|
|
|
En línea
|
|
|
|
Locura_23
Desconectado
Mensajes: 162
|
mm que raro, probaste a ver que te devuelve: Directory.Exists()
aveces pueden ser tambien cuestiones de permiso de administrador
|
|
|
En línea
|
|
|
|
Meta
|
Holas: Para no volverme loco, mejor quito la parte de crear directorio y lo dejo solo el archivo que crea y lee al lado del exe. Sigue con fallos. System.NullReferenceException: 'Object reference not set to an instance of an object.' using Newtonsoft.Json; namespace Guardar_y_cargar_datos_en_archivo.json_.NET_7._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } class MiInfo { public string? TextBox { get; set; } public bool CheckBox { get; set; } public bool RadioButton1_Luz_ON { get; set; } public bool RadioButton2_Luz_OFF { get; set; } } void SalvarDatos() { MiInfo miInfo = new() { TextBox = this.textBox1.Text, CheckBox = this.checkBox1.Checked, RadioButton1_Luz_ON = this.radioButton1.Checked, RadioButton2_Luz_OFF = this.radioButton2.Checked }; try { string serializado = JsonConvert.SerializeObject(miInfo); File.WriteAllText(@"Ejemplo.json", serializado); } catch {} } void RecuperarDatos() { string serializado = File.ReadAllText(@"Ejemplo.json"); MiInfo miInfo = (MiInfo)JsonConvert.DeserializeObject(serializado); this.textBox1.Text = miInfo.TextBox; this.checkBox1.Checked = miInfo.CheckBox; this.radioButton1.Checked = miInfo.RadioButton1_Luz_ON; this.radioButton2.Checked = miInfo.RadioButton2_Luz_OFF; } private void button_Guardar_Click(object sender, EventArgs e) { SalvarDatos(); } private void Form1_Load(object sender, EventArgs e) { RecuperarDatos(); } } }
No sabía que crear un json y leer fueran tan complicado, ejjejejeje. A ver si con el tiempo lo sacamos. Gracias.
|
|
|
En línea
|
|
|
|
Meta
|
Ya funciona, lo dejo aquí por si alguien lo necesita. using Newtonsoft.Json; namespace Guardar_y_cargar_datos_en_archivo.json_.NET_7._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } class MiInfo { public string? TextBox { get; set; } public bool CheckBox { get; set; } public bool RadioButton1_Luz_ON { get; set; } public bool RadioButton2_Luz_OFF { get; set; } } void SalvarDatos() { { TextBox = textBox1.Text, RadioButton1_Luz_ON = radioButton1 .Checked, RadioButton2_Luz_OFF = radioButton2 .Checked }; try { string serializado = JsonConvert.SerializeObject(miInfo); File.WriteAllText(@"Ejemplo.json", serializado); } catch {} } void RecuperarDatos() { if (File.Exists(@"Ejemplo.json")) { string serializado = File.ReadAllText(@"Ejemplo.json"); //MiInfo miInfo = (MiInfo)JsonConvert.DeserializeObject(serializado); MiInfo miInfo = JsonConvert.DeserializeObject<MiInfo>(serializado); if (miInfo != null) { textBox1.Text = miInfo.TextBox; checkBox1 .Checked = miInfo .CheckBox; radioButton1 .Checked = miInfo .RadioButton1_Luz_ON; radioButton2 .Checked = miInfo .RadioButton2_Luz_OFF; } } } private void button_Guardar_Click(object sender, EventArgs e) { SalvarDatos(); } private void Form1_Load(object sender, EventArgs e) { RecuperarDatos(); } } }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cual es el mejor campo o tipo de dato para guardar url's en mysql?
Bases de Datos
|
kinos
|
5
|
12,482
|
16 Agosto 2010, 20:09 pm
por kinos
|
|
|
¿Cual es el mejor Live CD para recuperar el sistemas operativo XP?
« 1 2 »
Dudas Generales
|
Luish@o
|
15
|
20,867
|
5 Diciembre 2010, 07:32 am
por modo_senin
|
|
|
Cuál es la mejor forma para mostrar datos a traves de VGA?
Electrónica
|
Agente Naranja
|
1
|
3,616
|
14 Marzo 2013, 16:37 pm
por Firos
|
|
|
Alguienn me dice cual tiene la mejor tarjeta de video? (cual es mejor)
Hardware
|
Aesio91
|
3
|
4,564
|
24 Diciembre 2015, 17:35 pm
por madoko
|
|
|
iMyFone iTransor, la alternativa a iTunes para guardar y recuperar datos de ...
Noticias
|
wolfbcn
|
0
|
982
|
31 Julio 2018, 13:59 pm
por wolfbcn
|
|