使用json.net和包含@symbol的json属性反序列化为F#type
我有一个F#类型,我将它从HTTP web请求的内容反序列化为一个对象。我正在调用的API使用odata协议,该请求的内容具有以下格式,其中包含键使用json.net和包含@symbol的json属性反序列化为F#type,f#,json.net,F#,Json.net,我有一个F#类型,我将它从HTTP web请求的内容反序列化为一个对象。我正在调用的API使用odata协议,该请求的内容具有以下格式,其中包含键@odata.context { "@odata.context":"OData", "Value":"token" } 我使用Json.net将内容反序列化回我的F#type,F#type如下 type Success = { [<JsonProperty(PropertyName = "@odata.context"
@odata.context
{
"@odata.context":"OData",
"Value":"token"
}
我使用Json.net将内容反序列化回我的F#type,F#type如下
type Success = {
[<JsonProperty(PropertyName = "@odata.context")>]
``odata.context``: string;
Value: string; }
(在F#type属性名称中没有@符号)将正确反序列化
let test2 = JsonConvert.DeserializeObject<Success>("{\"odata.context\": \"odata.context\", \"Value\": \"token\"}"))
let test2=JsonConvert.DeserializeObject(“{\”odata.context\“:\”odata.context\“,\”Value\“:\”token\”))
我相信这可能与酒店名称中的@符号有关
任何关于解决方案的想法都很好。如果您没有机会将Json.Net更新为更新版本(例如8.0.2),您可以使用 例如:
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";}
链接:
您使用的是什么版本?我使用的是F#3.0和json.net 6.0.4既然json.net是.net版本,并且将与C#一起使用,那么您在这里看了C#答案了吗?您没有办法更新json.net版本吗?请确保使用
Newtonsoft.json.8.0.2
-此版本的json.net将允许您正确地反序列化到对象。我最初尝试了版本6.0.4
,遇到了与您相同的问题。
{odata.context = "OData";
Value = "token";}