Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用json.net和包含@symbol的json属性反序列化为F#type_F#_Json.net - Fatal编程技术网

使用json.net和包含@symbol的json属性反序列化为F#type

使用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"

我有一个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``: 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";}