は、検索のビットの後、私はこの質問を見つけました:
How to inherit the attribute from interface to object when serializing it using JSON.NET
それは次のようになりますので、私は、ジェフ胸骨によってコードを取り、JsonIgnoreAttribute
検出を追加しました:使用
class InterfaceContractResolver : DefaultContractResolver
{
public InterfaceContractResolver() : this(false) { }
public InterfaceContractResolver(bool shareCache) : base(shareCache) { }
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
var interfaces = member.DeclaringType.GetInterfaces();
foreach (var @interface in interfaces)
{
foreach (var interfaceProperty in @interface.GetProperties())
{
// This is weak: among other things, an implementation
// may be deliberately hiding an interface member
if (interfaceProperty.Name == member.Name && interfaceProperty.MemberType == member.MemberType)
{
if (interfaceProperty.GetCustomAttributes(typeof(JsonIgnoreAttribute), true).Any())
{
property.Ignored = true;
return property;
}
if (interfaceProperty.GetCustomAttributes(typeof(JsonPropertyAttribute), true).Any())
{
property.Ignored = false;
return property;
}
}
}
}
return property;
}
}
このInterfaceContractResolver
が私のJsonSerializerSettings
にあります。JsonPropertyAttribute
があっても、どのインターフェイスでもJsonIgnoreAttribute
のすべてのプロパティは無視されます(内部if
ブロック)。
これを回答として追加し、問題が解決したらそれを受け入れる必要があります。 – Groo
私は今のところそれをしましたが、質問よりも8時間も経たないうちに(そして私は週末に働いていなかったので)、それをやり遂げることが許されなかったので、私はずっと早くそれをすることができませんでした。 – fero