Come si può impedire che una proprietà auto implementata venga serializzata dal formattatore binario? L'attributo [Non serializzato] può essere utilizzato solo con i campi. E il campo è nascosto quando si utilizzano proprietà auto implementate.Come impedire la serializzazione delle proprietà autoattive?
risposta
Non è supportato per le proprietà autoattive. Devi utilizzare un campo di supporto e impostare NonSerializedAttribute su di esso.
public class ClassWithNonSerializedProperty {
[NonSerialized]
private object _data; // Backing field of Property Data that is not serialized
public object Data{
get { return _data; }
set { _data = value; }
}
}
Se si esegue la serializzazione su Xml, è possibile utilizzare l'attributo XmlIgnore.
Non sono sicuro che sia possibile. Questo MSDN article on SerializableAttribute
suggerisce di implementare ISerializable e controllare la serializzazione da soli:
Tutti i campi pubblici e privati in un tipo che sono contrassegnati dal SerializableAttribute vengono serializzati per impostazione predefinita, a meno che il tipo implementa l'interfaccia ISerializable di ignorare il processo di serializzazione .
Oppure passare da una proprietà automatica per quello specifico campo.
// This works for the underlying delegate of the `event` add/remove mechanism.
[field:NonSerialized]
public event EventHandler SomethingHappened;
Ma non sembra per le proprietà auto-implementato. Ho pensato che fosse degno di nota perché è utile sapere quando si serializza un oggetto con abbonati di eventi ad esso collegati.
Non è possibile per le proprietà implementate automaticamente. Considerare il seguente:
Questo comportamento è "in base alla progettazione". La decisione nel momento in cui sono state implementate le proprietà automatiche era che avrebbero funzionato nel "caso comune" che, tra le altre cose, non significa attributi sul campo generato. L'idea alla base di ciò è mantenerli semplici e non trasformarli lentamente in proprietà complete. Quindi, se è necessario utilizzare l'attributo NonSerialized, le proprietà complete sono la via.
La soluzione proposta di utilizzare campo di supporto non-serializzato non sembra funzionare correttamente con NET 4.0 (almeno nel caso di serializzazione XML). Il campo infatti non viene serializzato ma la proprietà pubblica che lo usa serializza e quindi sconfigge lo scopo. L'uso della soluzione XmlIgnore aiuta in caso di serializzazione Xml. Disclaimer - Non ho verificato il comportamento di serializzazione binaria.
Se si sta serializzando su Json e si utilizza lo Json.NET serializer (che consiglio vivamente poiché ha molto più da offrire rispetto a un certo numero di altri serializzatori sul mercato), è possibile ottenere il risultato desiderato su proprietà utilizzando [JsonIgnore]
.
Non è necessario creare un campo.
Così il vostro codice sarebbe:
public class ClassName
{
[JsonIgnore]
public object IgnoreMe { get; set; }
public object DoNotIgnoreMe { get; set; }
}
- 1. Json.NET - impedire la serializzazione di una proprietà già serializzata
- 2. Come impedire la serializzazione di un datamember
- 3. Impedire la serializzazione di determinati campi
- 4. Le proprietà autoattive possono avere un set privato?
- 5. Come posso cambiare i nomi delle proprietà durante la serializzazione con Json.net?
- 6. Json.NET, come personalizzare la serializzazione per inserire una proprietà JSON
- 7. Qualche motivo per utilizzare le proprietà autoattive rispetto alle proprietà implementate manualmente?
- 8. Come impedire a Visual Studio di creare la cartella "Proprietà"?
- 9. Come trasferisco la proprietà delle stringhe?
- 10. Serializzazione veloce/deserializzazione delle strutture
- 11. Come impedire la chiusura automatica delle parentesi graffe in ReSharper?
- 12. Come impedire la compilazione delle variabili globali "non utilizzate"?
- 13. Come impedire la ridefinizione delle chiavi in YAML?
- 14. Impedire l'aggiornamento di determinate proprietà?
- 15. Serializzazione e controllo delle versioni
- 16. Esiste un attributo .Net per impedire la valutazione delle proprietà all'interno del debugger?
- 17. Modifica dei nomi di proprietà per la serializzazione
- 18. Diversi nomi di proprietà JSON durante la serializzazione e deserializzazione
- 19. Serializzazione delle eccezioni su WCF
- 20. Ignora nil proprietà durante la serializzazione JSON utilizzando RestKit
- 21. Esiste un modo per impedire la sostituzione delle proprietà degli oggetti JavaScript?
- 22. Newtonsoft Json.NET può saltare la serializzazione delle liste vuote?
- 23. La serializzazione delle collezioni immutabili Guava è stabile?
- 24. Come scrivere Javadoc delle proprietà?
- 25. serializzazione Jackson: come ignorare le proprietà della superclasse
- 26. Maven: imposta la proprietà in pom.xml dal file delle proprietà
- 27. Impedire la messa a fuoco delle finestre Python
- 28. ASP.NET MVC: controllo della serializzazione dei nomi delle proprietà con JsonResult
- 29. personalizzazione serializzazione delle collezioni Java utilizzando xstream
- 30. Perché utilizzare la serializzazione
oppure è possibile utilizzare [field: NonSerialized] direttamente sulla proprietà. – profou