У меня есть веб-сервис ASP.NET, украшенный System.Web.Script.Services.ScriptService () , поэтому он может возвращать данные в формате json.У меня это работает, но ASP.Net требует, чтобы параметры веб-службы были указаны в json для вывода json.
Я использую jquery для выполнения моих вызовов ajax и нене кажется простым способом создать хороший объект javascript из элементов формы.Я посмотрел на serialiseArray в библиотеке json2, но он не кодирует имена полей как имена свойств в объекте.
Если у вас есть 2 элемента формы, подобные этому
<input type="text" name="namefirst" id="namefirst" value="John"/>
<input type="text" name="namelast" id="namelast" value="Doe"/>
, вызывающий $ ("form"). Serialize () возвращает стандартную строку запроса
namefirst=John&namelast=Doe
, вызывающую JSON.stringify ($ ("form"). SerializeArray ()) даст вам (громоздкое) представление json
[{"name":"namefirst","value":"John"},{"name":"namelast","value":"Doe"}]
Это будет работать при переходе на веб-сервис, но это уродливо, так как вам необходим код, подобный этому, для чтения:
Public Class NameValuePair
Public name As String
Public value As String
End Class
<WebMethod()> _
Public Function GetQuote(ByVal nvp As NameValuePair()) As String
End Function
Вы также должны были бы обернуть этот текст json в другой объект с именем nvp, чтобы сделать веб-сервис счастливым.Тогда вам больше всего нужно работать с массивом NameValuePair, когда вам нужен ассоциативный массив.
Возможно, я шучу, но вообразил что-то более элегантное, когда начал этот проект - больше похоже на
Public Class Person
Public namefirst As String
Public namelast As String
End Class
, для которого json должен выглядеть примерно так:
{"namefirst":"John","namelast":"Doe"}
Есть ли простой способ сделать это?Очевидно, что это просто для формы с двумя параметрами, но когда у вас очень большая форма, конкатенация строк становится ужасной.Наличие вложенных объектов также усложнит ситуацию.
. Куча, на которой я остановился на данный момент, заключается в использовании стандартного формата пары «имя-значение», вставленного в объект json.Это компактный и быстрый
{"q":"namefirst=John&namelast=Doe"}
, а затем есть такой веб-метод на сервере, который анализирует строку запроса в ассоциированный массив.
<WebMethod()> _
Public Function AjaxForm(ByVal q As String) as string
Dim params As NameValueCollection = HttpUtility.ParseQueryString(q)
'do stuff
return "Hello"
End Sub
Что касается кластеров, то этот кажется довольно элегантным с точки зрения количества кода, но мой вопрос: есть ли лучший способ?Существует ли общепринятый способ передачи данных формы в веб-службы сценариев asp.net?