2011-11-03 20 views
3

.NET Json序列化程序将Double.PositiveInfinity等序列化为Infinity(无效的JSON)之类的东西。我现在试图使用Json.NET将对象序列化为JSON,但是我想将它包装起来,以便像Infinity这样的值转换为NULL或字符串“Infinity”。我如何去做这件事?如何在.NET中生成的JSON中处理Infinity

回答

0

要做到这一点的唯一方法是将Double值序列化为一个自定义类型,它提供值的顶部信息。例如

对于
{ 
    'isInfinity': 'true', 
    'isNan': 'false' 
    'value': '0' }; 

这可以通过使用包装类型来处理Double

[DataContract] 
public sealed class DoubleWrapper { 
    [DataMember] 
    public bool isInfinity; 

    [DataMember] 
    public bool isNaN; 

    [DataMember] 
    public double value; 

    public DoubleWrapper(double p) { 
    isInfinity = Double.IsInfinity(p); 
    isNaN = Double.IsNaN(p); 
    value = p; 
    } 
} 
+0

我发现这样做的另一种方式很容易做到的,但因为我是新的,我不能发布回答。基本上你可以继承'JsonConverter',并将它添加到'JsonSerializerSettings'中的'Converters'中。 – Phil

+0

@ user1016172没有意识到你可以做到这一点。这似乎是一个有趣的方法。 – JaredPar