161 votes

Faire en sorte qu'une propriété soit désérialisée mais pas sérialisée avec json.net

Nous avons quelques fichiers de configuration qui ont été générés en sérialisant des objets C# avec Json.net.

Nous aimerions faire passer une propriété de la classe sérialisée d'une simple propriété d'enum à une propriété de classe.

Une façon simple de le faire serait de laisser l'ancienne propriété enum sur la classe, et de faire en sorte que Json.net lise cette propriété lorsque nous chargeons la configuration, mais ne la sauvegarde pas à nouveau lors de la prochaine sérialisation de l'objet. Nous traiterons séparément la génération de la nouvelle classe à partir de l'ancienne propriété enum.

Existe-t-il un moyen simple de marquer (par exemple avec des attributs) une propriété d'un objet C#, de sorte que Json.net l'ignore UNIQUEMENT lors de la sérialisation, mais y prête attention lors de la désérialisation ?

0voto

synergetic Points 1531

La réponse de Jraco11 est très soignée. Si vous voulez utiliser le même IContractResolver pour la sérialisation et la désérialisation, vous pouvez utiliser ce qui suit :

public class JsonPropertiesResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty property = base.CreateProperty(member, memberSerialization);

        if (member.IsDefined(typeof(JsonIgnoreSerializationAttribute)))
        {
            property.ShouldSerialize = instance => false;
        }

        return property;
    }
}

0voto

Bar Nuri Points 235

qui fera l'affaire, créez une propriété dont l'ensemble ne peut être que

exemple 1 : https://dotnetfiddle.net/IxMXcG

[JsonProperty("disabled-protections")]
public JArray DisabledProtections { set => IsPartialResult = (value != null && value.HasValues); }

public bool IsPartialResult { get; private set; }

exemple 2 :

private JArray _disabledProtections;

[JsonProperty("disabled-protections")]
public JArray DisabledProtections { set => _disabledProtections = value; }

public bool IsPartialResult => _disabledProtections != null && _disabledProtections.HasValues;

-3voto

Utilisez [JsonIgnore] dans le public de la classe du modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X