Json.Net ignora los campos privados serializados en Unity.
Me gustaría ignorar los campos privados serializados en la serialización JSON, pero parece que <code>[JsonIgnore]</code>
solo funciona con campos <code>public</code>
, no funciona con campos <code>[SerializeField]</code>
<code>private</code>
. ¿Existe alguna otra forma de ignorar esos campos?
Este es un ejemplo de clase:
using UnityEngine;
using Newtonsoft.Json;
[JsonObject(MemberSerialization.OptIn)]
public class ObjetoEjemplo : MonoBehaviour {
[JsonProperty]
private string propiedad = "Propiedad";
[JsonIgnore]
[SerializeField]
private string ignorado = "Ignorado";
}
Se sigue serializando el campo ignorado
a JSON, a pesar de que estoy usando [JsonObject(MemberSerialization.OptIn)]
en la clase y [JsonIgnore]
en el campo private
.
MemberSerialization.OptIn
indica que:
“Solo se serializan los miembros marcados con
JsonPropertyAttribute
oSystem.Runtime.Serialization.DataMemberAttribute
”
, pero parece que también incluye los atributos SerializeField
.
Editar: Estoy usando JilleJr Newtonsoft.Json-for-Unity
(enlace de GitHub) con JilleJr Newtonsoft.Json-for-Unity.Converters
(enlace de GitHub)
davy.ai
Una opción podría ser crear un resolutor de contratos personalizado y anular el método
CreateProperty
para excluir los campos marcados con[SerializeField]
. Aquí hay una implementación de ejemplo:Luego, utiliza este resolutor de contratos al serializar tu objeto:
Esto debería excluir cualquier campo marcado con
[SerializeField]
de ser serializado a JSON.