加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用json.net和包含@符号的json属性反序列化为F#类型

发布时间:2020-12-16 18:41:48 所属栏目:百科 来源:网络整理
导读:我有一个F#类型,我从HTTP Web请求的内容反序列化到一个对象.我调用的API使用odata协议,该请求的内容具有以下格式,包含密钥@ odata.context. { "@odata.context":"OData","Value":"token"} 我使用Json.net将内容反序列化为我的F#类型,F#类型如下 type Success
我有一个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"}"))

(在F#类型属性名称中没有@符号)这会正确反序列化.

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";}

链接:

https://dotnetfiddle.net/SR16Ci

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读