我试图从Json.NET的官方网络博客中执行样本
我使用最新的Json.NET(Json.NET 6.0.2)
创建了F#控制台应用程序我粘贴了代码示例并将其采用到F#3.0:
type Shape =
| Rectangle of float * float
| Circle of float
| Empty
[<EntryPoint>]
let main argv =
let shape1 = Rectangle(1.3, 10.0)
let json = JsonConvert.SerializeObject(shape1)
// {
// "Case": "Rectangle",
// "Fields": [
// 1.3,
// 10.0
// ]
// }
let shape2 = JsonConvert.DeserializeObject<Shape>(json)
Console.ReadKey() |> ignore
0
但它不起作用。基本上JsonConvert.SerializeObject(shape1)返回“{}”。
我很好奇为什么它不起作用?
除此之外,我在F#WebAPI中使用Json.NET并且它可以工作。
我已经在github上传了整个项目: https://github.com/AntyaDev/SerializationTest
答案 0 :(得分:2)
像PatrykĆwiek一样,我无法重现你描述的行为。它适用于F#3.1上的Json.NET 6.0.2。但是,您的代码清单存在一些问题,这些问题无法按照给定的方式进行编译。
您需要打开相应的命名空间(或模块):
open System
open Newtonsoft.Json
此外,F#使用了重要的空格,因此代码清单应该与原始博客类似:
type Shape =
| Rectangle of width : float * length : float
| Circle of radius : float
| Empty
[<EntryPoint>]
let main argv =
let shape1 = Rectangle(1.3, 10.0)
let json = JsonConvert.SerializeObject(shape1)
// {
// "Case": "Rectangle",
// "Fields": [
// 1.3,
// 10.0
// ]
// }
let shape2 = JsonConvert.DeserializeObject<Shape>(json)
Console.ReadKey() |> ignore
0
请注意, let main argv =
下面的所有代码都是缩进的。