这是我的代码:
open Newtonsoft.Json
open Newtonsoft.Json.Converters
type T = {
mutable name : string;
mutable height : int;
}
let a = { name = "abc"; height = 180;}
a.height <- 200
let b = JsonConvert.SerializeObject(a, Formatting.Indented)
printfn "%s" b
代码的输出是:
{
"name@": "abc",
"height@": 200,
"name": "abc",
"height": 200
}
如何以正确的“@”来避免输出?
答案 0 :(得分:3)
试试这个:
[<CLIMutable>]
[<JsonObject(MemberSerialization=MemberSerialization.OptOut)>]
type T = {
name : string;
height : int;
}
MemberSerialization.OptOut
仅导致公共成员被序列化(跳过作为记录的实现细节的私有字段)。 CLIMutable
属性为intended specifically for serialization,并且不必为每位成员添加mutable
前缀。
答案 1 :(得分:1)
您是否尝试在属性前添加属性[&lt; ...&gt;]?因为该属性仅适用于属性,而不适用于生成的后端。但是,不确定JSON.NET对哪个属性作出反应。
答案 2 :(得分:1)
在DataMemberAttribute
的帮助下,您可以指定序列化成员的名称:
type T = {
[<field: DataMember(Name="name")>]
mutable name : string;
[<field: DataMember(Name="height")>]
mutable height : int;
}
答案 3 :(得分:0)
我遇到了同样的问题,在经过Json.Net docs的大量挖掘后,我不得不最终看到这是有用的。
open System
open System.Runtime.Serialization
[<CLIMutable>]
[<DataContract>]
type T = {
[<DataMember>] mutable name : string;
[<DataMember>] mutable height : int }