【发布时间】:2020-10-03 05:55:13
【问题描述】:
我有一个要反序列化的简单对象,但我不明白我得到的错误。
代码如下:
open System
open Newtonsoft.Json
type r =
{
Timestamp: DateTime
Currency: string
PreviousDeposited: int64 option
PreviousWithdrawn: int64 option
PreviousTransferIn: int64 option
PreviousTransferOut: int64 option
PreviousAmount: int64 option
TransferIn: int64 option
TransferOut: int64 option
Amount: int64 option
PendingCredit: int64 option
PendingDebit: int64 option
ConfirmedDebit: int64 option
}
let a =
"{
\"account\": 117122,
\"currency\": \"XBt\",
\"prevDeposited\": 747841316,
\"prevWithdrawn\": 2160000,
\"prevTransferIn\": 1000000,
\"prevTransferOut\": 0,
\"prevAmount\": 656893723,
\"prevTimestamp\": \"2020-06-13T12:00:00.005Z\",
\"deltaDeposited\": 0,
\"deltaWithdrawn\": 0,
\"deltaTransferIn\": 0,
\"deltaTransferOut\": 0,
\"deltaAmount\": 0,
\"deposited\": 747841316,
\"withdrawn\": 2160000,
\"transferIn\": 1000000,
\"transferOut\": 0,
\"amount\": 656893723,
\"pendingCredit\": 0,
\"pendingDebit\": 0,
\"confirmedDebit\": 0,
\"timestamp\": \"2020-06-13T12:00:00.643Z\",
\"addr\": \"2NBMEXRW4oCiNzVUq4uVFRSsK2jtTLbtfc7\",
\"script\": \"532102c10be2f0dc20f4285c25156aa22a0c46d2b89ccc4d1c8eaed92ea0c1a8f40c002102ceba29da1af96a0f2ef7cda6950b8be2baeb1adf12c0d5efebb70dbcaa086ba021034ab762f4ede40311e9f8bf01db0bbea578497ac6ccc8aa94a74394b05a53d94b2103d5a42b90e9d7156155661979530a09d2e12e252ef4104e5611274a7ae7e2b09454ae\",
\"withdrawalLock\": []
}"
JsonConvert.DeserializeObject<r> a
我得到这个错误:
Newtonsoft.Json.JsonSerializationException:意外的属性 读取联合时发现“transferOut”。路径“transferOut”,第 18 行, 位置 18.] 在 Newtonsoft.Json.Converters.DiscriminatedUnionConverter.ReadJson(JsonReader reader, 类型 objectType, Object existingValue, JsonSerializer 序列化器)在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter 转换器、JsonReader 阅读器、类型 objectType、Object existingValue)
在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolvePropertyAndCreatorValues(JsonObjectContract 合约、JsonProperty containerProperty、JsonReader reader、Type 对象类型)在 ...
我不明白是什么让“TransferOut”属性如此特别,以至于它停在这个属性上,而不是之前的任何其他相同属性上。
我这里有个小提琴:https://dotnetfiddle.net/HGiia5
【问题讨论】:
-
您可能需要为此考虑FsPickler。有利于沟通,但不利于持久。
-
@BentTranberg,它看起来像一个有趣的库。但在这种情况下它无法工作,因为我从第 3 方获取数据,对其进行处理并将其发送到具有多个消费者的队列。