小编Tom*_*ers的帖子

为什么0.9重复总是等于1

在数学上,0.9重复可以显示为等于1.然而,这个问题不是关于无穷大,收敛或这背后的数学.

上述假设可以用C#中的双精度表示,具体如下.

var oneOverNine = 1d / 9d;
var resultTimesNine = oneOverNine * 9d;
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,(resultTimesNine == 1d)计算结果为true.

当使用小数代替时,评估结果为false,但是,我的问题不是关于double和decimal的不同精度.

由于没有类型具有无限精度,如何以及为什么双重维持这样的相等而小数不是?关于oneOverNine变量存储在内存中的方式,上面代码的"行之间"发生了什么?

.net c# math

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

替换JSON序列化上的敏感数据值

我有一些我想要序列化为JSON的对象.但是,某些对象具有通过属性被视为"SensitiveData"的属性.

[SensitiveDataAttribute]
public string SomeSensitiveProperty {get; set;}
Run Code Online (Sandbox Code Playgroud)

目前,我正在覆盖序列化程序上的'CreateProperty'方法,以便我可以根据是否具有此'SensitiveData'属性来更改是否应该序列化属性:

public class SensitiveDataResolver : DefaultContractResolver
    {
        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            var property = base.CreateProperty(member, memberSerialization);
            property.ShouldSerialize = instance =>
            {
                if (member is PropertyInfo)
                {
                    var prop = (PropertyInfo) member;
                    var isSensitiveData = Attribute.IsDefined(prop, typeof (SensitiveDataAttribute));
                    return !isSensitiveData;
                }
                return false;
            };
            return property;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我序列化时,我然后使用该解析器作为序列化器的设置:

var settings = new JsonSerializerSettings() { ContractResolver = new SensitiveDataResolver() };
var requestString = JsonConvert.SerializeObject(someObject, settings);
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不希望从序列化中排除属性.我希望它们被序列化,但默认值为'SensitiveData'.

有没有办法使用Attributes实现这一目标?

c# serialization json json.net

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

标签 统计

c# ×2

.net ×1

json ×1

json.net ×1

math ×1

serialization ×1