![](/img/trans.png)
[英]Unexpected property when serializing F# option field in record type with JSON.NET
[英]Serializing F# Record type to JSON includes '@' character after each property
DataContractJsonSerializer为F#记录类型创建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
它使用编译器生成的支持字段的名称。 您可以使用DataMemberAttribute
提供自己的名称。
[<DataContract>]
type Update = {
[<field: DataMember(Name="name")>]
name: string;
[<field: DataMember(Name="latitude")>]
latitude: decimal;
[<field: DataMember(Name="longitude")>]
longitude: decimal;
[<field: DataMember(Name="heart_rate")>]
heart_rate: int}
虽然Daniel的解决方案可以正常工作,但是必须为记录中的每个属性添加属性是相当繁琐的。 事实证明,Json.NET开箱即用产生更具可读性的JSON。 对于我的应用程序,我不需要专门使用DataContractSerializer,所以它是JSON.net!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.