我有一个F#类型,我从HTTP Web请求的内容反序列化到一个对象.我调用的API使用odata协议,该请求的内容具有以下格式,包含密钥@ odata.context.
{ "@odata.context":"OData","Value":"token" }
我使用Json.net将内容反序列化为我的F#类型,F#类型如下
type Success = { [<JsonProperty(PropertyName = "@odata.context")>] ``odata.context``: string; Value: string; }
在这种情况下,odata.context始终为null.
我已经尝试了以下两种方法(在F#类型属性名称中使用@符号),结果为NULL
let test1 = JsonConvert.DeserializeObject<Success>("{\"@odata.context\": \"odata.context\",\"Value\": \"token\"}"))
let test2 = JsonConvert.DeserializeObject<Success>("{\"odata.context\": \"odata.context\",\"Value\": \"token\"}"))
对解决方案的任何想法都会很棒.
解决方法
如果您没有机会将Json.Net更新为更新版本(例如8.0.2),则可以使用
Newtonsoft.Json.Linq.
例:
open System open Newtonsoft.Json.Linq type Success = { ``odata.context``: string; Value: string; } let json = "{\"@odata.context\":\"OData\",\"Value\":\"token\"}" let p = JObject.Parse(json) {``odata.context`` = p.["@odata.context"] |> string ;Value = p.["Value"] |> string} |> printfn "%A"
打印:
{odata.context = "OData"; Value = "token";}
链接: