Ich habe eine Klasse wie folgt Serialisierung:Wie eine Eigenschaft als Objekt auf der Grundlage des tatsächlichen Art des Wertes ignorieren, wenn sie mit einem benutzerdefinierten ContractResolver
class Test
{
public object Obj { get; set; }
}
Manchmal Obj
den Wert eines nicht serialisierbaren Typen hat, wie zum Beispiel: byte[]
oder SqlDataReader
.
Ich habe versucht, eine benutzerdefinierte ContractResolver
zu machen, um die Eigenschaft zu ignorieren, wenn der Wert byte[]
ist. Aber es funktioniert nicht: der Eigenschaftstyp ist immer noch Object
, nicht byte[]
.
public class AutoIgnoreComplexTypesContractResolver : DefaultContractResolver
{
private static readonly List<Type> IgnoredTypes = new List<Type>()
{
typeof(byte[]),
typeof(SqlDataReader)
};
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
var propertyType = property.PropertyType.GetUnderlyingType();
if (IgnoredTypes.Contains(propertyType))
{
property.ShouldSerialize = instance => false;
}
else
{
property.ShouldSerialize = instance => true;
}
return property;
}
}
Können Sie mir helfen, den realen Wert Art und ignorieren es zu bekommen?
Ja, es funktioniert. Vielen Dank! – NSK