Tho*_*mas 2 serialization f# json.net
我有一个库,可以向我发送包含元组的结果。我需要处理一些数据,对其进行序列化,然后将其传送到另一个系统。
元组总是由 2 个值组成,但是在序列化时它们非常浪费:
(3, 4)
Run Code Online (Sandbox Code Playgroud)
将序列化为:
{"Item1":3,"Item2":4}
Run Code Online (Sandbox Code Playgroud)
然而
[3; 4]
Run Code Online (Sandbox Code Playgroud)
将序列化为:
[3,4]
Run Code Online (Sandbox Code Playgroud)
我想避免重建整个数据结构并复制所有数据来更改这部分。
有没有办法在序列化器级别将元组转换为列表?
可以轻松更改下一个进程的解析器以容纳列表而不是元组,因此这似乎是最好的方案。
丑陋的选择是用正则表达式修复序列化的字符串,但我真的很想避免这样做。
您可以通过指定自己的JsonConverter. 以下示例显示了将int * int元组写入为两元素 JSON 数组的格式化程序。
open Newtonsoft.Json
type IntIntConverter() =
inherit JsonConverter<int * int>()
override x.WriteJson(writer:JsonWriter, (a:int,b:int), serializer:JsonSerializer) =
writer.WriteStartArray()
writer.WriteValue(a)
writer.WriteValue(b)
writer.WriteEndArray()
override x.ReadJson(reader, objectType, existingValue, hasExistingValue, serializer) =
(0, 0)
let sample = [ (1,2); (3,4) ]
let json = JsonConvert.SerializeObject(sample, Formatting.None, IntIntConverter())
Run Code Online (Sandbox Code Playgroud)
运行它的结果将是[[1,2],[3,4]]. 请注意,我尚未实现该ReadJson方法,因此您还无法解析元组。这将涉及一些额外的工作,但您可以查看现有的JsonConverters 以了解应该如何完成。
另请注意,这是针对包含两个整数的特定元组类型。如果您需要支持其他元组,您可能需要提供转换器的多个变体。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |