, Поскольку провайдеры ценностей Json.NET используют делегаты, генерируемые во время выполнения, их производительность должна быть лучше, чем просто отражение.

аюсь реализовать пользовательский JSON.net IContractResolver, который заменит все нулевые значения свойств указанной строкой. Я знаю, что эта функциональность доступна через атрибуты членов типов, которые сериализуются; это альтернативный маршрут, который мы рассматриваем.

Моя реализация распознавателя до сих пор выглядит следующим образом. StringValueProvider - это простая реализация IValueProvider, которая не влияет на проблему. Я не могу понять, как получить значениеproperty так как у меня нет знаний в этом методе экземпляра, который поставлялmember так что я не могу передать это в качестве аргументаGetValue() (помечено как ЧТО-ИДЕТ-ЗДЕСЬ? в образце кода).

Есть ли способ, которым я могу получить то, что мне нужно от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;
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос