Игнорировать свойство, если оно существует в System.Text. json. Тип параметра - объект - PullRequest
0 голосов
/ 18 июня 2020

Я использую. NET Ядро 3.1 во время ответа некоторого приложения Я выполняю сериализацию объекта для ведения журнала.

object result = FromSomeCall();
Logger.DebugFormat("Final Response against {0}", JsonSerializer.Serialize(result.Value));

Один объект похож на

{
    "auth_req_id": ".....",
    "expires_in": 1800,
    "correlation_id": null,
    "access_token": "..==",
    "token_type": "Bearer",
    "id_token": "....."
}
* 1006 может игнорировать одно конкретное свойство (скажем здесь id_token), только если оно существует во время сериализации
object result = FromSomeCall();

Может приводить к нескольким типам объектов.

1 Ответ

0 голосов
/ 19 июня 2020

Использовали работу, чтобы сначала преобразовать мой объект в динамический c, а затем изменить значение (я также могу удалить здесь)

private void LogWithExludedProperty(object value, string key)
        {
            dynamic copiedValue = value.ToDynamic();
            if (copiedValue is ExpandoObject)
            {
                if (((IDictionary<string, dynamic>)copiedValue).ContainsKey(key))
                {
                    ((IDictionary<string, dynamic>)copiedValue)[key] = ".....";
                }
            }

            Logger.DebugFormat("Final Response Token:{0}", JsonSerializer.Serialize(copiedValue));
        }

используйте следующий метод расширения

public static dynamic ToDynamic(this object value)
        {
            IDictionary<string, object> expando = new ExpandoObject();

            foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType()))
                expando.Add(property.Name, property.GetValue(value));

            return expando as ExpandoObject;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...