Gibt es eine Möglichkeit, Json.NET [JsonIgnore]
Attribut für eine Klasse zu ignorieren, die ich keine Berechtigung zum Ändern/zu erweitern?Ignore [JsonIgnore] Attribut bei Serialisierung/Deserialisierung
Ich brauche alle Eigenschaften in dieser Klasse serialisiert/deserialisiert. Ich habe versucht, Subklassen Json.NET der DefaultContractResolver
Klasse und überschreiben, was die entsprechende Methode, um aussieht:
public class JsonIgnoreAttributeIgnorerContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
// Serialize all the properties
property.ShouldSerialize = _ => true;
return property;
}
}
aber das Attribut auf der ursprünglichen Klasse scheint immer zu gewinnen:
public static void Serialize()
{
string serialized = JsonConvert.SerializeObject(
new CannotModify { Keep = 1, Ignore = 2 },
new JsonSerializerSettings { ContractResolver = new JsonIgnoreAttributeIgnorerContractResolver() });
// Actual: {"Keep":1}
// Desired: {"Keep":1,"Ignore":2}
}
ich tiefer gegraben, und fand eine Schnittstelle namens IAttributeProvider
die eingestellt werden können (es hatte einen Wert von „Ignorieren“ für die Ignore
Eigenschaft, so dass ein Hinweis war dies sein könnte, etwas, das geändert werden muss):
...
property.ShouldSerialize = _ => true;
property.AttributeProvider = new IgnoreAllAttributesProvider();
...
public class IgnoreAllAttributesProvider : IAttributeProvider
{
public IList<Attribute> GetAttributes(bool inherit)
{
throw new NotImplementedException();
}
public IList<Attribute> GetAttributes(Type attributeType, bool inherit)
{
throw new NotImplementedException();
}
}
Aber der Code wird nie getroffen.
Nicht eine „Lösung“ per se ändern Vertrag, aber man konnte einen Spiegel Modell machen und das serialisiert werden soll. – Eris