【问题标题】:System.Net.Http.HttpClient adds @ at the end of JSON keys. Why?System.Net.Http.HttpClient 在 JSON 键的末尾添加 @。为什么?
【发布时间】:2013-05-08 12:12:19
【问题描述】:

我有一个非常简单的问题我无法解决。

我有一个这样定义的 Action 方法:

    [HttpPut]
    public ActionResult Register(ClientRegistrationInformation clientInformation)
    { ... }

ClientRegistrationInformation 在 F# 中的定义如下:

type ClientRegistrationInformation () =
    member val ClientKey = Guid.Empty with get, set
    member val ValidationToken = String.Empty with get, set

我想使用 System.Net.Http.HttpClient 调用此操作方法。当我尝试这个时:

httpClient.PutAsJsonAsync (RegisterUrl, clientInformation)

JSON 内容是这样发送的,这是行不通的:

"{\"ClientKey@\":\"8cb33ed5-ef49-4c40-afbe-78f0c198448e\",\"ValidationToken@\":\"token\"}"

当我尝试使用 jQuery.ajax 时,内容是这样发送的,这确实有效:

"{\"ClientKey\":\"8cb33ed5-ef49-4c40-afbe-78f0c198448e\",\"ValidationToken\":\"token\"}"

为什么 HttpClient 在名称末尾添加了不必要的 @ 符号? 我该如何摆脱它们?

谢谢。

【问题讨论】:

    标签: asp.net-mvc json httpclient


    【解决方案1】:

    好的。我发现了问题。我很傻。

    事实证明,F# 的自动属性的实现方式是,序列化程序会选择与属性相同但在末尾附加 @ 的支持字段。

    通过更改ClientRegistrationInformation的声明,问题就消失了:

    type ClientRegistrationInformation () =
        let mutable clientKey = Guid.Empty
        let mutable validationToken = String.Empty
        member this.ClientKey
            with get () = clientKey
            and  set v  = clientKey <- v
        member this.ValidationToken
            with get () = validationToken
            and  set v  = validationToken <- v
    

    愚蠢的错误。 :)

    【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多