Сериализация F # Тип записи для JSON включает символ "@" после каждого свойства
DataContractJsonSerializer создает типы записей JSON для F #, которые включают символ "@" после каждого имени свойства. Кто-нибудь знает, можно ли получить JSON, который не имеет этого символа в конце?
{"[email protected]":20,"[email protected]":45.0,"[email protected]":108.0,"[email protected]":"Rambo"}
Вот script Я использую для вывода этого образца
#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
Ответы
Ответ 1
Хотя решение Daniel будет работать правильно, довольно утомительно добавлять атрибуты для каждого свойства в записи. Оказывается, Json.NET выпускает более читаемый JSON из коробки. Для моего приложения мне не нужно специально использовать DataContractSerializer, поэтому JSON.net это!
Ответ 2
Он использует имя генерируемых полей создания компилятора. Вы можете использовать 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}