すべてのnullプロパティ値を指定した文字列で置き換えるカスタムJSON.net IContractResolverを実装しようとしています。私は、この機能がシリアル化される型のメンバーの属性を介して利用可能であることを認識しています。これは私たちが検討している代替ルートです。カスタムJSON.netコントラクトリゾルバのプロパティ値をオーバーライド
これまでのリゾルバの実装は次のとおりです。 StringValueProviderは、問題に影響しないIValueProviderの単純な実装です。property
の値を取得する方法を把握することができません。member
を提供するインスタンスのこのメソッドには知識がありません。 GetValue()
(コードサンプルでWHAT-GOES-HERE?とマークされています)の引数として渡してください。
member
またはproperty
から必要なものを得る方法がありますか?
public class NullSubstitutionPropertyValueResolver : DefaultContractResolver
{
private readonly string _substitutionValue;
public NullSubstitutionPropertyValueResolver(string substitutionValue)
{
_substitutionValue = substitutionValue;
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty result = base.CreateProperty(member, memberSerialization);
PropertyInfo property = member as PropertyInfo;
if (property == null)
{
return result;
}
// What do I use here to get the property value?
bool isNull = property.GetValue(WHAT-GOES-HERE?) == null;
if (isNull)
{
result.ValueProvider = new StringValueProvider(_substitutionValue);
}
return result;
}
}
:
ここは、作業のデモです。あなたは 'StringValueProvider'でこれを行うことができます。そこでは、インスタンスと値の両方にアクセスでき、値がnullであるかどうかをチェックし、代わりにデフォルト値を使用できます。 – Evk