我的服務器使用ServiceStack生成JSON,並且我需要向瀏覽器發送包含NaN的double[]
數組。
由於JSON中沒有標準的NaN編碼方式,所以 ServiceStack在存在NaN (例如[0,NaN,42]
)的情況下產生無效的JSON並不令人驚訝。我選擇字符串值作爲NaN的自定義表示(順便說一下,還有±Inf): [0,"NaN",42,"Inf","-Inf"]
作爲示例。 (當然,我也在瀏覽器端實現了必要的後期處理)。
我設法通過JsConfig<double>.RawSerializeFn
設置編碼器功能。 這是細,直到我意識到作爲副作用double
類型的所有DTO屬性從它們的JSON表示消失時該值爲0。將NaN編碼爲JSON
編輯:這可以通過new KeyValuePair<double, double>(0, 1).ToJson()
它返回來證明{"Key":0,"Value":1}
時JsConfig<double>.RawSerializeFn
是未設置, 但返回{"Value":1}
當設置JsConfig<double>.RawSerializeFn
時。
這個改變是我想避免的副作用。 (但我的核心問題是,NaN的沒有犧牲零值DTO性發射。)
我瀏覽ServiceStack的source code ,它證實了一個自定義RawSerializeFn
存在 激活Equals(DefaultValue,propertyValue)
檢查 (由導致propertySuppressDefaultConfig==true
),這在默認情況下被省略。
AFAICS避免這種檢查的唯一方法是設置JsConfig.IncludeNullValues=true
, 這是不好的,因爲它只能爲double
值不能完成。我需要 默認行爲:省略具有null
值(用於參考類型)的屬性和在生成的JSON中包含0.0個雙精度值。
如何實現這些?
感謝的最新版本,但是這並沒有解決我的問題。對不起,如果我不夠清楚。我已經更新了這個問題,請參閱編輯段落。 – robert4 2015-01-12 20:25:35
@ robert4好的不用擔心我剛剛爲此添加了一個新的'JsConfig .IncludeDefaultValue'選項,它將生成所需的輸出。這可從v4.0.36 + [現已在MyGet上提供](https://github.com/ServiceStack/ServiceStack/wiki/MyGet)獲得。 –
mythz
2015-01-12 20:49:52
感謝您的超快反應!這個解決方案是好的。 – robert4 2015-01-12 21:41:00