2013-05-08 3 views
0

У меня довольно простая проблема, которую я не могу решить.System.Net.Http.HttpClient добавляет @ в конце ключей JSON. Зачем?

У меня есть метод действий, определенный как это:

[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 отправляется так, что не работает:

"{\"[email protected]\":\"8cb33ed5-ef49-4c40-afbe-78f0c198448e\",\"[email protected]\":\"token\"}" 

Когда я пытаюсь то же самое, используя jQuery.ajax, содержание передается так, что DOES work:

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

Почему HttpClient добавляет ненужные символы @ в конце имен? Как я могу избавиться от них?

Спасибо.

ответ

0

Хорошо. Я нашел проблему. Я был глуп.

Оказывается, что автоматические свойства 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 

глупую ошибку. :)

+0

Это интересно, вы можете подумать о том, как сообщить об этом команде F #. – rossisdead

+1

Собственно, это известное поведение. MSDN даже предупреждает не использовать их в фреймворках (см. Раздел «Предупреждение»): http://msdn.microsoft.com/en-us/library/dd483467.aspx –

Смежные вопросы