Convertir retorna los valores predeterminados de un objeto creado.
Supongamos que tengo una clase simple llamada Cat
, y me gustaría serializar y deserializar esta clase.
Clase Cat:
public class Cat {
public Cat () : base (Type.Cat)
{
this.Origin = "American";
this.Color = "Black";
}
[JsonConstructor]
public Cat (bool Serialize) : base (Type.Cat) // base es la Clase Animal
{
}
}
Clase Animal:
public abstract class Animal {
public string Color {
get;
set;
}
public string Origin {
get;
set;
}
public Animal(Type AnimalType)
{
}
}
Método Serialize:
public void SerializeObj(Cat cat)
{
var mysettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto,
Formatting = Newtonsoft.Json.Formatting.Indented };
var json = JsonConvert.SerializeObject(cat, typeof(Cat), mysettings );
using (StreamWriter stream = new StreamWriter(path))
{
stream.WriteLine(json);
stream.Close();
}
}
Método Deserialize:
public object Deserialize(string object)
{
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
var cat = JsonConvert.DeserializeObject<Cat>(object, settings);
return cat;
}
Llamando a los dos métodos:
Cat cat = new Cat();
cat.Color = "White";
cat.Origin = "Europe";
var fileString = Serialize(cat);
// archivo creado con fileString
Cat cat = Deserialize(myfile);
Console.WriteLine(cat.Origin); // imprimirá American
Console.WriteLine(cat.Color); // imprimirá Black
El problema es que la deserialización produce los valores predeterminados en lugar de los valores modificados al serializar.
Ten en cuenta que myfile contiene los valores actualizados ( Color = “White” y Origin = “Europe”)
¿Cómo puedo solucionar este problema?
davy.ai
Para solucionar este problema, puedes añadir setters públicos a las propiedades
Color
yOrigin
en la claseCat
. Esto permitirá que el proceso de deserialización establezca los valores de estas propiedades basándose en los valores del archivo JSON.Con este cambio, el método
Deserialize
debería establecer correctamente los valores deColor
yOrigin
basándose en el archivo JSON.