Je viens de mettre à jour ma version de NewtonSoft JSON.NET de la version 3.0.0 vers la version 3.5.0 et j'ai remarqué que les membres protégés ne sont pas implicitement sérialisés.Mise à niveau de NewtonSoft JSON.NET sans sérialisation implicite des membres protégés
J'ai la classe suivante:
public class SimpleFileContainer : IDto
{
public virtual string Name { get; protected set; }
public virtual string Path { get; protected set; }
public SimpleFileContainer(string name, string path)
{
Name = name;
Path = path;
}
}
Le code de test suivant ne passe pas
var json = JsonConvert.SerializeObject(new SimpleFileContainer("Name", "Path"));
var deserialised = JsonConvert.DeserializeObject<SimpleFileContainer >(json);
Assert.That(deserialised.Name, Is.EqualTo("Name");
à la fois les propriétés de nom et le chemin sont nuls à moins que je soit rendre la propriété fixe public ou ajouter la mise à jour la classe avec les attributs suivants:
[JsonObject(MemberSerialization.OptOut)]
public class SimpleFileContainer : IDto
{
[JsonProperty]
public virtual string Name { get; protected set; }
[JsonProperty]
public virtual string Path { get; protected set; }
public SimpleFileContainer(string name, string path)
{
Name = name;
Path = path;
}
}
Ceci est une taille raisonnable projet qui utilise beaucoup le processus de sérialisation, je ne veux pas passer par le code en ajoutant ces attributs à chaque classe et membre.
Y a-t-il un moyen de contourner cela?
Ce paramètre sérialise également les champs. Non seulement les propriétés. – Kugel