c#-Json的F#类型正在输出Name @和Name
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-Json的F#类型正在输出Name @和Name,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1935字,纯文字阅读大概需要3分钟。
内容图文
![c#-Json的F#类型正在输出Name @和Name](/upload/InfoBanner/zyjiaocheng/668/4485d2c04d614f059334a3299a35356e.jpg)
我正在使用F#类型,并在WPF窗口的数据源上使用它
并由此生成一个json:
type Customer = {
mutable Name: string ;
mutable Phone: PhoneNumber list
}
and
PhoneNumber = {
mutable Number: string
}
但是输出是这样的:
{"Name@":"Superhero","Phones@":[{"Number@":"111","Number":"111"},{"Number@":"222","Number":"222"},{"Number@":"333","Number":"333"}],"Name":"Superhero","Phones":[{"Number@":"111","Number":"111"},{"Number@":"222","Number":"222"},{"Number@":"333","Number":"333"}]}
如果我将类型更改为:
type Customer = { Name: string ; Telephone: string }
它输出我期望的Json:
{"Name":"Superhero","Phones":[{"Number":"111"},{"Number":"222"},{"Number":"333"}]}
但是WPF绑定抛出此异常:
A TwoWay or OneWayToSource binding cannot work on the read-only property
这是我用来生成Json C#的代码:
var phonelist = new List<PhoneNumber> { new PhoneNumber("111"),
new PhoneNumber("222"),
new PhoneNumber("333")
};
var fsharpList = Microsoft.FSharp.Collections.ListModule.OfSeq(phonelist); // TODO: Use a Extension Method
var c = new EntidadesFS.DO.Customer(name: "Superhero", phones: fsharpList);
var json = Newtonsoft.Json.JsonConvert.SerializeObject(c);
为什么会这样呢?
如何仅使用可变属性输出属性名称,而末尾不使用@?
或如何解决?
解决方法:
基于对该问题的宝贵评论,并进行了更多搜索
我能够找到解决方案:
[<CLIMutable>]
[<JsonObject(MemberSerialization = MemberSerialization.OptIn)>]
type Customer = {
[<JsonProperty>] mutable Name: string
[<JsonProperty>] mutable Phones: PhoneNumber list
}
and [<CLIMutable>]
[<JsonObject(MemberSerialization = MemberSerialization.OptIn)>]
PhoneNumber = {
[<JsonProperty>] mutable Number: string
}
或者,甚至更好,如果我将字段保持不变(默认为F#),
我只需要添加[< CLIMutable>]属性:
[<CLIMutable>]
type Customer = {
Name: string
Phones: PhoneNumber list
}
and
[<CLIMutable>]
PhoneNumber = {
Number: string
}
输出:
{"Name":"Superhero","Phones":[{"Number":"111"},{"Number":"222"},{"Number":"333"}]}
现在,这将按预期生成Json,并且还可以与WPF绑定一起很好地工作.
内容总结
以上是互联网集市为您收集整理的c#-Json的F#类型正在输出Name @和Name全部内容,希望文章能够帮你解决c#-Json的F#类型正在输出Name @和Name所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。