相关疑难解决方法(0)

覆盖自定义JSON.net合约解析程序中的属性值

我正在尝试实现一个自定义的JSON.net IContractResolver,它将用指定的字符串替换所有null属性值.我知道这个功能可以通过序列化类型成员的属性获得; 这是我们正在考虑的替代路线.

到目前为止我的解析器实现如下.StringValueProvider是一个IValueProvider的简单实现,不会影响问题,这是我无法弄清楚如何获取值,property因为我不知道提供的实例的这个方法,member所以我无法传递它作为参数GetValue()(在代码示例中标记为WHAT-GOES-HERE?).

有没有办法,我能得到什么,我从需要memberproperty

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)
        { …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

6
推荐指数
1
解决办法
2942
查看次数

用于 PCI 合规性的敏感数据的自定义 JSON 序列化

我们必须记录 Web 服务的传入请求和传出响应。这包括每个对象的 JSON 序列化,以便它们可以存储在数据库中。

某些信息被视为敏感信息(例如社会安全号码、信用卡号码等),我们不能根据 PCI 合规性将这些信息包含在我们的日志中。现在我们正在用占位符值(例如“[PRIVATE]”)手动替换这些值,但这仅适用于字符串属性。某些数据(例如出生日期)未存储为字符串,因此这不起作用,因为在序列化之前替换属性值。最大的问题是有人很容易忘记在记录之前删除敏感数据,这是非常不可取的。

为了解决这个问题,我想创建一个自定义属性并将其放置在属性上,然后让 JSON 序列化例程在每个属性上查找此属性,如果存在,请将序列化值替换为占位符,例如“[PRIVATE] ”。

现在我们使用 System.Web.Script.Serialization.JavaScriptSerializer 进行序列化。显然它对我的自定义属性一无所知。我将如何更改序列化过程,以便用我的自定义“SensitiveData”属性修饰的任何数据都替换为占位符值?我不反对使用不同的序列化程序,但希望我可以利用现有序列化程序的功能,而不是编写自己的序列化程序。

c# serialization json pci-compliance

4
推荐指数
1
解决办法
1419
查看次数

标签 统计

c# ×2

json ×2

json.net ×1

pci-compliance ×1

serialization ×1