Подтвердить что ты не робот

Сериализация 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
4b9b3361

Ответ 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}