当前位置: 首页 > 面试题库 >

将F#记录类型序列化为JSON,每个属性后均包含“ @”字符

章安宜
2023-03-14
问题内容

DataContractJsonSerializer为F#记录类型创建JSON,该JSON类型在每个属性名称后均包含“
@”字符。有谁知道是否有可能获得不带符号结尾的JSON?

{"heart_rate@":20,"latitude@":45.0,"longitude@":108.0,"name@":"Rambo"}

这是我用来输出此示例的脚本

#r "System.Xml"
#r "System.Runtime.Serialization"

open System.Text
open System.Runtime.Serialization.Json
open System.IO

type Update = {
    name: string;
    latitude: decimal;
    longitude: decimal;
    heart_rate: int}

let update = {name = "Rambo"; latitude = 45.0m; longitude = 108.0m; heart_rate = 20}

let serializer = new DataContractJsonSerializer( typeof<Update> )

let stream = new MemoryStream()
let data = serializer.WriteObject(stream, update)
let updateData = stream.ToArray()

let json = (Encoding.UTF8.GetString(updateData))

printfn "%s" json

问题答案:

尽管Daniel的解决方案可以正常工作,但是必须向记录中的每个属性添加属性是一件很乏味的事情。事实证明,Json.NET开箱即用地生成了更具可读性的JSON。对于我的应用程序,我不需要专门使用DataContractSerializer,所以它是JSON.net!



 类似资料:
  • NET 6.0.1增加了对记录和区分联合的F#支持。使用Json序列化F#记录类型时。NET我现在得到格式良好的JSON。 序列化操作如下所示: 然而,当我试图通过ASP。NET WebApi 5.0服务,用C#编写,序列化的JSON在所有属性前面都包含@符号。@-符号来自记录类型的内部支持字段(这曾经是Json.Net和F#的一个已知问题)。 但是——因为我使用的是更新版的Json。NET,其结

  • 问题内容: 我正在针对返回JSON数据的第三方API进行编程,但是格式可能有点奇怪。某些属性可以是一个对象(包含一个Id属性),也可以是一个字符串(它是该对象的ID)。例如,以下两个都是有效的: 和 我正在尝试使用JSON.net将其反序列化为强类型类,但到目前为止运气还不足。我最好的主意是将其序列化为两个属性,一个为字符串,另一个为对象,并为每个属性使用自定义JsonConverter以允许变量

  • 问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列

  • 问题内容: 我有一些具有各种属性的JSON,其中大多数是简单数据类型。但是,我在JSON中有一个属性,当我将其反序列化为C#类时,我只需要将其反序列化为字符串即可。 JSON示例: 除了将是有效的JSON对象外,“ json”对象没有任何设置结构。 因此,在上面的示例中,“ json”的值是一个JSON对象-但是当它反序列化时,我需要将它作为字符串。 因此,如果我的C#类是: 然后,如果我使用:

  • 问题内容: 当谈到Dart中的JSON编码时,根据Seth Ladd的赞誉 ,现在最终批准的正式方式是+ 。 假设我们有一堆模型类(PODO),例如: 现在,我希望能够像这样对我的域对象进行JSON编码: 不幸的是,这行不通… …除非我们明确告知如何编码: 我真的必须在模型类的每个类中添加一个方法,还是有更好的方法? 编辑 :这是我正在寻找的简单序列化: 例如,在ServiceStack.Text

  • 我想将任意JSON反序列化为< code >映射 为了获取原语,应该为每个属性调用某种自定义客户端回调。根据键的不同,会发生某些反序列化。例如(伪代码): 在 SO 杰克逊 - 递归解析到地图中