Start Debugging
2023-09-25 Actualizado 2023-11-05 csharpdotnetdotnet-8 Edit on GitHub

.NET 8 serializar propiedades de jerarquías de interfaces

.NET 8 añade soporte para serializar propiedades de jerarquías de interfaces, incluyendo todas las propiedades de todas las interfaces según el tipo de la variable declarada.

.NET 8 añade soporte para serializar propiedades de jerarquías de interfaces. Esto significa que todas las propiedades de todas las interfaces de la jerarquía se incluirán en la serialización. Lo más importante es desde dónde empiezas.

Tomemos como ejemplo la siguiente jerarquía:

public interface IBase
{
    public int Base { get; set; }
}

public interface IDerived : IBase
{
    public int Derived { get; set; }
}

public interface IDerived2 : IDerived
{
    public int Derived2 { get; set; }
}

public class Derived2Impl : IDerived2
{
    public int Base { get; set; }
    public int Derived { get; set; }
    public int Derived2 { get; set; }
}

Ahora, durante la serialización, si pasas una instancia de Derived2Impl almacenada en una variable IDerived2, se serializarán las 3 propiedades de la jerarquía.

IDerived2 value = new Derived2Impl { Base = 0, Derived = 1, Derived2 = 2 };

JsonSerializer.Serialize(value);
// Output: {"Derived2":2,"Derived":1,"Base":0}

Si en cambio defines la variable como de tipo IDerived, solo se serializarán 2 propiedades.

IDerived value = new Derived2Impl { Base = 0, Derived = 1, Derived2 = 2 };

JsonSerializer.Serialize(value);
// Output: {"Derived":1,"Base":0}

Y para una variable IBase, como cabría esperar, solo se serializará una propiedad, a pesar de que el objeto que estamos serializando es de tipo Derived2Impl, tiene las 3 interfaces implementadas y, por tanto, las 3 propiedades definidas.

IBase value = new Derived2Impl { Base = 0, Derived = 1, Derived2 = 2 };

JsonSerializer.Serialize(value);
// Output: {"Base":0}

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Volver