F#与C#中的反序列化>> [

问题描述 投票:2回答:1
我有以下json:

{ "data": [ { "timestamp": "2019-11-07T00:23:52.095Z", "symbol": "XBTUSD", "side": "Buy", "size": 1, "price": 9356.5, "tickDirection": "PlusTick", "trdMatchID": "01476235-ad89-1777-9067-8ce6d0e29992", "grossValue": 10688, "homeNotional": 0.00010688, "foreignNotional": 1 } ] }

最后3个字段是可选的。

当我在C#中反序列化时,我将执行以下操作:

public class Trade { public DateTime Timestamp; public string Symbol; public string Side; public long Size; public long Price; public long? GrossValue; public float? HomeNotional; public float? ForeignNotional; } public class TradeContainer { public Trade[] Data; } var j = JsonConvert.DeserializeObject<TradeContainer>(x);

而且都很好。

在F#中,我这样做:

type Trade = { Timestamp : DateTime Symbol : string Side : string Size : int64 Price : int64 GrossValue : int64 option HomeNotional : float option ForeignNotional : float option } type TradeContainer = { Data : Trade[] } let t = JsonConvert.DeserializeObject<TradeContainer>(x)

但是会失败。但是,如果我删除选项关键字,则在交易类型中,它将正确地反序列化。

我得到的错误是:

Newtonsoft.Json.JsonSerializationException:意外的属性阅读工会时发现“ homeNotional”。路径“数据[0] .homeNotional”,第1行,位置233。在Newtonsoft.Json.Converters.DiscriminatedUnionConverter.ReadJson(JsonReader读取器,类型objectType,对象existValue,JsonSerializer序列化程序)

为什么有区别?但我又该如何实现这一目标,因为我需要计划一些值可能不存在?

我有以下json:{“ data”:[{“ timestamp”:“ 2019-11-07T00:23:52.095Z”,“ symbol”:“ XBTUSD”,“ side”:“ Buy”,“ size “:1,”价格“:9356.5,” ...

c# f# json.net json-deserialization
1个回答
0
投票
问题出在JSON.NET的DU序列化实现中。 It's not idiomatic并实质上转储大小写和字段:
© www.soinside.com 2019 - 2024. All rights reserved.