【问题标题】:Need help deserializing JSON object in asp.net inside [WebMethod]需要帮助在 [WebMethod] 内的 asp.net 中反序列化 JSON 对象
【发布时间】:2014-12-12 20:20:06
【问题描述】:

我正在使用 C#,我的项目是 .NET 3.5 网站项目。尝试反序列化如下所示的 Json 对象:

{
"jsonData": [
    {
        "name": "sEcho",
        "value": 1
    },
    {
        "name": "iColumns",
        "value": 2
    },
    {
        "name": "sColumns",
        "value": ","
    },
    {
        "name": "iDisplayStart",
        "value": 0
    },
    {
        "name": "iDisplayLength",
        "value": 10
    },
    {
        "name": "mDataProp_0",
        "value": 0
    },
    {
        "name": "sSearch_0",
        "value": ""
    },
    {
        "name": "bRegex_0",
        "value": false
    },
    {
        "name": "bSearchable_0",
        "value": true
    },
    {
        "name": "bSortable_0",
        "value": true
    },
    {
        "name": "mDataProp_1",
        "value": 1
    },
    {
        "name": "sSearch_1",
        "value": ""
    },
    {
        "name": "bRegex_1",
        "value": false
    },
    {
        "name": "bSearchable_1",
        "value": true
    },
    {
        "name": "bSortable_1",
        "value": true
    },
    {
        "name": "sSearch",
        "value": ""
    },
    {
        "name": "bRegex",
        "value": false
    },
    {
        "name": "iSortCol_0",
        "value": 0
    },
    {
        "name": "sSortDir_0",
        "value": "asc"
    },
    {
        "name": "iSortingCols",
        "value": 1
    }
]
}

我的项目中也安装了http://james.newtonking.com/json

    [WebMethod]
    public static string PostAjaxMethod(List<object> jsonData)
    {
    // Code here to deserialize the object
    }

我不知道该怎么做。我知道必须有另一个类,我会将对象反序列化到该类,但在类的结构方面需要帮助。

我将非常感谢任何帮助。谢谢!!!

更新:

我需要与此类似的代码 JsonConvert.DeserializeObject ... 但是,我的 json 对象中有“jsonData”,我真的不需要它。这用于在 ajax 调用和 WebMethod 之间传递数据

"data": JSON.stringify({ jsonData : aoData })

那么在反序列化对象之前是否有额外的步骤来删除它?

更新:

改变了

[WebMethod]
    public static string PostAjaxMethod(List<object> jsonData)

到这里

[WebMethod]
    public static string PostAjaxMethod(List<MyTestClass> jsonData)

添加了一个类

    public class MyTestClass
{
    public string name { get; set; }
    public string value { get; set; }
}

几乎是我想要的,除了我需要它是这种格式

sEcho would be set to 1
iColumns would be set to 2 etc

【问题讨论】:

  • 您的问题是您的json 不代表对象列表。我建议你删除根jsondata。并开始做正确的事情,创建一个代表您的 json 对象的 C# 类...
  • @gustavodidomenico 将 Json 对象传递给 aps.net 中的 [WebMethod] 我必须命名它!这就是 jsonData 存在的原因。在我的 [WebMethod] 中,我得到公共静态字符串 PostAjaxMethod(List jsonData)

标签: .net ajax json deserialization webmethod


【解决方案1】:

在这种情况下,WebMethod jsonData 的参数必须是字符串。

然后,您创建一个 JArray 对象并将其初始化为解析字符串的结果。然后您可以将属性作为多维字典数组访问。请注意,为了正确解析字符串,它必须是一个数组。在 javascript 中,您可以通过这种方式创建数组:

var jsonObject = {
      "name" : "Foo"
};
var arr = [];
arr.push(jsonObject);

//Now send the object to the server
//Notice that you must use JSON.stringify() in order to send the data to the server

Asp.net 代码:

 [WebMethod]
public static string PostAjaxMethod(string jsonData)
{
    JArray _jsonData = JArray.Parse(jsonData);
    string name = _jsonData[0]["name"].toString();
}

【讨论】:

  • 这很有帮助,但我需要类似于 JsonConvert.DeserializeObject 的东西
  • 对不起,这不是真的......您不需要手动反序列化 json。
  • @gustavodidomenico 你有代码示例或链接到如何做到这一点?
  • 当然...encosia.com/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 2021-02-13
  • 1970-01-01
  • 2010-12-15
  • 2015-08-07
  • 1970-01-01
相关资源
最近更新 更多