Da Ihr Ziel ist, eine Eigenschaft bei der Serialisierung, aber nicht bei der Deserialisierung zu ignorieren, können Sie eine ContractResolver
verwenden.
Beachten Sie, dass die folgende Klasse genau das tut und auf CamelCasePropertyNamesContractResolver
basiert, um sicherzustellen, dass sie in Kamel-JSON-Feldern serialisiert. Wenn Sie das nicht möchten, können Sie stattdessen von DefaultContractResolver
erben.
Auch das Beispiel, das ich selbst hatte, basiert auf dem Namen einer Zeichenfolge, aber Sie können leicht überprüfen, ob die Eigenschaft von Ihrem benutzerdefinierten Attribut geschmückt ist, anstatt den Eigenschaftsnamen zu vergleichen.
public class CamelCaseIgnoringPropertyJsonResolver<T> : CamelCasePropertyNamesContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
// list the properties to ignore
var propertiesToIgnore = type.GetProperties()
.Where(x => x.GetCustomAttributes().OfType<T>().Any());
// Build the properties list
var properties = base.CreateProperties(type, memberSerialization);
// only serialize properties that are not ignored
properties = properties
.Where(p => propertiesToIgnore.All(info => info.Name != p.UnderlyingName))
.ToList();
return properties;
}
}
Dann können Sie es wie folgt:
static private string SerializeMyObject(object myObject)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCaseIgnoringPropertyJsonResolver<JsonIgnoreSerializeAttribute>()
};
var json = JsonConvert.SerializeObject(myObject, settings);
return json;
}
Schließlich kann das benutzerdefinierte Attribut von jeder Art sein, aber das Beispiel zum Spiel:
internal class JsonIgnoreSerializeAttribute : Attribute
{
}
Der Ansatz ist getestet und funktioniert auch mit verschachtelten Objekten.
tun müssen, um sie Attribute sein? Was möchten Sie in Ihrem benutzerdefinierten Serialisierungsattribut tun? –
Ich möchte eine Eigenschaft bei der Serialisierung, aber nicht bei der Deserialisierung ignorieren können. Ich dachte, es wäre einfach, einfach ein Attribut hinzuzufügen, z. '[JsonIgnoreSerialize]' an die Eigenschaft. –