如果System.Text.json中存在属性,则忽略该属性。参数类型为对象

时间:2020-06-18 12:44:04

标签: c# serialization .net-core-3.1 system.text.json

在某些应用程序响应期间,我正在使用.NET Core 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": "....."
}

只有在序列化过程中存在某个我可以忽略的特定属性(在这里id_token)的任何可能性

object result = FromSomeCall();

可以导致多种类型的对象。

1 个答案:

答案 0 :(得分:0)

已经变通了,先将我的对象转换为动态对象,然后更改值(我也可以在此处删除)

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;
        }