Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET C#读取数据表时意外的JSON标记_C#_Asp.net_Json_Json.net_Unexpected Token - Fatal编程技术网

ASP.NET C#读取数据表时意外的JSON标记

ASP.NET C#读取数据表时意外的JSON标记,c#,asp.net,json,json.net,unexpected-token,C#,Asp.net,Json,Json.net,Unexpected Token,我在ASP.NET中工作,在尝试将JSON字符串序列化到DataTable中时遇到以下错误: 读取数据表时出现意外的JSON标记。期待星光,明白了吗 StartObject 我读过其他有同样错误的帖子,看起来这个错误通常发生在JSON对象无效的时候。不过,我已经在JsonLint中验证了我的JSON,一切正常。我不是在构建JSON,而是从PaySimpleAPI接收它。我在我的软件的其他部分也使用了非常类似的方法,它工作得很好,所以我无法解释为什么会出现错误 非常感谢您的帮助。我没有很多使用JS

我在ASP.NET中工作,在尝试将JSON字符串序列化到DataTable中时遇到以下错误:

读取数据表时出现意外的JSON标记。期待星光,明白了吗 StartObject

我读过其他有同样错误的帖子,看起来这个错误通常发生在JSON对象无效的时候。不过,我已经在JsonLint中验证了我的JSON,一切正常。我不是在构建JSON,而是从PaySimpleAPI接收它。我在我的软件的其他部分也使用了非常类似的方法,它工作得很好,所以我无法解释为什么会出现错误

非常感谢您的帮助。我没有很多使用JSON的经验

这是我的密码:

protected void LoadPaymentSchedule(int customerId)
{
    // This method returns an object from Paysimple's API
    RecurringPaymentResponse recurringPayment = StudioPaymentAccess.GetStudioPaymentSchedule(customerId);

    // Convert the Json response to DataTable
    string a = JsonConvert.SerializeObject(recurringPayment);
    DataTable tblSchedules = JsonConvert.DeserializeObject<DataTable>(a);//**error occurs here

    // Bind to gridview
    if (tblSchedules.Rows.Count > 0)
    {
        grdPaymentSchedules.DataSource = tblSchedules;
        grdPaymentSchedules.DataBind();
    }
    else
    {
        //No schedules found
    }

}

为了反序列化
数据表
,它看起来像是预期的JSON

一个快速解决方法是调整序列化,以便它写出一个数组:

string a=JsonConvert.SerializeObject(新[]{recurringPayment});

另一种选择是直接绑定到返回模型,假设
DataTable
不是必需的。例如,请参阅的答案。

是否尝试将RecurringPaymentResponse对象反序列化为System.Data.DataTable? 如果您试图将RecurringPaymentResponse对象反序列化为System.Data.DataTable,它肯定会失败。因为两个类的属性不相同

您应该直接更新gridview行

GridViewRow row = (GridViewRow) GridView1.Rows[0]; //First row
row.Cells[0].Text = recurringPayment.CustomerId;
row.Cells[1].Text = recurringPayment.CustomerFirstName;
row.Cells[2].Text = recurringPayment.CustomerLastName;
//and so on.....
DataTable要求数组为

{
    "data":
    [
        {"ID":1,"Name":"Simon"},
        {"ID":2,"Name":"Alex"}
    ]
}

我试图反序列化,但没有发现错误,反序列化运行成功。

这工作做得很好!非常感谢!当然,回想起来似乎很明显。
{
    "data":
    [
        {"ID":1,"Name":"Simon"},
        {"ID":2,"Name":"Alex"}
    ]
}