JSON.NET读取JObject时出错。

5

我正在通过 AJAX 和 Web Api 向服务器发送 JSON 对象:

var data = [
  ["fdsfsd", "Kifdsfa", "fsdfsa", "fadsf", "fasdfsd", "fadsf", "fasdfsd"],
  ["2008", "-5", "11", "12", "13"],
  ["2009", "20", "-11", "14", "13"],
  ["2010", "30", "15", "-12", "readOnly"]
];

$.ajax({
        url: '../webapi/Products',
        type: 'POST',
        dataType: "text", 
        data: "="+JSON.stringify( data ),
        success: function (test) {
                alert(test);
            },
            error: function (test) {
                alert("Error");
            }

所以我从服务器获取了一个值,我想用JSON.NET进行解析:

public void Post([FromBody]string value )
{
      JObject o = JObject.Parse(@value);
}

这将抛出异常:

Error reading JObject from JsonReader. Current JsonReader item is not an object:
StartArray. Path '', line 1, position 1.

为什么?我觉得这个数值很合理?

你在服务器上打印值来检查语法是否正确了吗?我猜你得到的是一个 JSON 数组而不是一个 JSON 对象。 - HashtagMarkus
是的,它看起来像是一个数组。那么没有办法将其转换为JObject,对吗?我该如何将这个数组转换为DataTable呢? - daniel
2个回答

12

json.stringify会创建以下的json字符串:

[
  ["fdsfsd", "Kifdsfa", "fsdfsa", "fadsf", "fasdfsd", "fadsf", "fasdfsd"],
  ["2008", "-5", "11", "12", "13"],
  ["2009", "20", "-11", "14", "13"],
  ["2010", "30", "15", "-12", "readOnly"]
]

这是一个jsonArray而不是JsonObject。所以在服务器端,您需要使用JArray a = JArray.Parse(@value);来读取它。


0

浏览一下,我建议更改

data: "="+JSON.stringify( data ),

data: "myJSON="+JSON.stringify( data ),

...因为jQuery期望序列化一个对象或有效的查询字符串,然后监听该发布的变量。我认为你不能只POST一堆数据而不将其分配为名称/值对的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接