在数学上,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变量存储在内存中的方式,上面代码的"行之间"发生了什么?
我有一些我想要序列化为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实现这一目标?