Как преобразовать JSON, созданный из таблицы, в таблицу данных для запроса на обновление в ASP.NET? - PullRequest
2 голосов
/ 29 января 2011

Я хотел бы отправить данные json из таблицы HTML в кодовый блок ASP.NET и обновить данные в базе данных SQL Server.Код и JSON для TableProductToUpdate() приведены ниже.

function UpdateProductTable() {
        $.ajax({
            type: "POST",
            url: "Default.aspx/UpdateProductTable",
            data: "{'products':" + JSON.stringify(TableProductToUpdate()) + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            error: function (data) {
                alert(data.responseText);                
            },
            success: function (data) {
                alert("Data Updated Successfully");                
            }
        });
    }


{'products':
  "[
    {
      \"id\":\"907\", 
      \"name\":\"Rear Brakes\", 
      \"productNumber\":\"RB-9231\", 
      \"color\":\"Silver\", 
      \"stdCost\":\"47.286\", 
      \"listPrice\":\"106.5\", 
      \"size\":\"null\", 
      \"weight\":\"317\", 
      \"modelId\":\"128\"
    },

    {
     \"id\":\"948\", 
     \"name\":\"Front Brakes\", 
     \"productNumber\":\"FB-9873\", 
     \"color\":\"Silver\", 
     \"stdCost\":\"47.286\", 
     \"listPrice\":\"106.5\", 
     \"size\":\"null\", 
     \"weight\":\"317\", 
     \"modelId\":\"102\"}]"
    }

Как использовать эту строку JSON в JSON.NET.Как мне выполнить цикл по данным и создать запрос на обновление?

Мне удалось сериализовать данные в JSON с использованием JSON.NET, но можно ли сделать обратное?*

Пробовал ответ Натана, но я получаю следующую ошибку:

{"Message":"Cannot convert object of type \u0027System.String\u0027 to type
 \u0027System.Collections.Generic.List`1[_Default+Product]\u0027","StackTrace":"   
  at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, 
JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n
at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, \
Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& 
convertedObject)\r\n   at 
System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary`2 
rawParams)\r\n   at 
System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, 
IDictionary`2 parameters)\r\n   at 
System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, 
WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n   at 
System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, 
WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}  

Кодовый код

 <WebMethod()> _
    Public Shared Function UpdateProductTable(ByVal products As List(Of Product)) As String            
        Dim product As Product
        For Each product In products
            'Update query
        Next
        Return "Success"
    End Function

    Public Class Product
        Property id As String
        Property name As String
        Property number As String
        Property color As String
        Property stdCost As String
        Property listPrice As String
        Property size As String
        Property weight As String
        Property modelId As String
    End Class

Ответы [ 2 ]

1 голос
/ 30 января 2011

JSON.stringify () - отличный способ перевести объект JavaScript в JSON для передачи в службу .NET.Однако в этом случае кажется, что вы уже собираете JSON до этого момента.Таким образом, вам не нужно будет JSON-сериализацию этих данных во второй раз.

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

    $.ajax({
        type: "POST",
        url: "Default.aspx/UpdateProductTable",
        data: TableProductToUpdate(),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        error: function (data) {
            alert(data.responseText);                
        },
        success: function (data) {
            alert("Data Updated Successfully");                
        }
    });

AsПока свойства в вашем массиве объектов совпадают со свойствами вашего класса Product, .NET будет автоматически обрабатывать десериализацию строки JSON и создание экземпляра вашего List.

1 голос
/ 29 января 2011

Я бы вообще сделал параметр продуктов вашего метода страницы типом списка.Очевидно, что для этого вам понадобится класс, представляющий один продукт, но обычно asp.net может взять ваш правильно сформированный json и поместить его в переменную списка.так что в итоге вы получите что-то вроде:

[webmethod]
pubilc bool UpdateProductTable(list<product> products) {
  foreach (product p in products) {
    //do some stuff
  }
}

edit:

попробуйте обновить свой javascript, чтобы привести все в порядок, так что вместо того, что у вас там есть, что-тонапример:

var rowData = JSON.stringify({'products':TableProductToUpdate()})

, а затем передать rowData в ваш вызов ajax.не уверен, решит ли это проблему или нет, но кажется, что это лучший способ убедиться в правильности json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...