有没有办法在氟中强制将一个可以为空的双精度作为 NaN 传递给 flex?(反之亦然)默认情况下,这些值作为 null 传递,但 actionscript 中的 Number 不可为 null,因此默认情况下将其转换为 0。
我需要服务器端可空的双精度数是 flex 中的 NaN,并且来自 flex 的 NaN 值是服务器端的可空双精度数。
有什么想法吗?
谢谢,
有没有办法在氟中强制将一个可以为空的双精度作为 NaN 传递给 flex?(反之亦然)默认情况下,这些值作为 null 传递,但 actionscript 中的 Number 不可为 null,因此默认情况下将其转换为 0。
我需要服务器端可空的双精度数是 flex 中的 NaN,并且来自 flex 的 NaN 值是服务器端的可空双精度数。
有什么想法吗?
谢谢,
我不知道氟,但我想你可以通过:
(myDouble ?? Double.NaN)
这个表达式是类型double
,不是,如果是double?
,它将是 NaN 。myDouble
null
我们只是遇到了同样的问题。我们的解决方案是修改 Fluorine 代码以编写对象。
在文件AMFWriter
line1367
中,就在调用之前,WriteAMF3Data(memberValue)
我添加了以下代码:
//Mapping null double?s to NaN when writing data.
if (memberValue == null)
{
System.Reflection.PropertyInfo p = type.GetProperty(classMember.Name);
if (p != null)
{
Type t = p.PropertyType; // t will be System.String
if (t.IsEquivalentTo(typeof(Nullable<Double>)))
memberValue = Double.NaN;
}
}
到目前为止它似乎有效。但是,我通常不在 .NET 中编写代码,因此可能有更好的方法来执行此操作。
看起来 fluorine 有一个配置部分,它定义了如何转换可空值。我还没有测试过。
复制自 http://www.fluorinefx.com/docs/fluorine/nullable.html
FluorineFx.NET
Null values
The <nullable> configuration section allows the use of special value of the given value type as the null value.
Use this solution only when you can identify a value which is unused.
<nullable>
<type name="System.Int32" assembly="MinValue"/>
<type name="System.Double" assembly="MinValue"/>
<type name="System.DateTime" assembly="MinValue"/>
<type name="System.Guid" assembly="Empty"/>
</nullable>
The name attribute is the fully qualified type name, the value attribute is a static member of the type (such as "MinValue") or a parseable value (0 for System.Int32 for example).
The acceptNullValueTypes option
Fluorine will accept null values sent from client for value-types if configured accordingly
<acceptNullValueTypes>false</acceptNullValueTypes>
If acceptNullValueTypes = true (the default is false if not specified) any value-type that is not explicitly initialized with a value will contain the default value for that object type (0 for numeric types, false for Boolean, DateTime.Min for DateTime)