Newtonsoft JSON不包含'Item'的定义

时间:2015-09-26 15:10:31

标签: c# sql-server json web-services

我正在尝试从我的Web服务项目中获取JSON数组中的Json对象......我收到此错误:

Newtonsoft JSON does not contain definition for 'Item' ,

我也尝试使用其他功能而不是“Item”功能,但这也不起作用

顺便说一下,我用VB到C#在线转换器工具来生成这段代码......

这是我的代码

 try
        {
            HttpContext context = this.Context;
            string strJson = "";

            JArray OrderItems = JArray.Parse(JSONString);
            //Dim IncrementalConnection As New SqlConnection()
            SqlConnection conn = new SqlConnection(connectionString);
            conn.Open();
            SqlCommand IncrementalIdCommand = new SqlCommand("INSERT INTO TheOrderIds DEFAULT VALUES; SET @AutoID=SCOPE_IDENTITY()", conn);
            SqlParameter Param = new SqlParameter();
            Param.ParameterName = "@AutoID";
            Param.Size = 4;
            Param.Direction = ParameterDirection.Output;
            IncrementalIdCommand.Parameters.Add(Param);
            IncrementalIdCommand.ExecuteNonQuery();
            int OrderId = Convert.ToInt32(Param.Value);
            conn.Close();

            foreach (JObject OrderItem in OrderItems)
            {
                string strSQL = "insert into Orders(ProductNumber,Name,Category,Price,OrderId,TableNumber,WaiterName,CashierName,DateAndTime,isActive,isCoocked,isPaid,isYesCanceled,ProductQuantity,extraQty,PaidDate,isDiscounted, DicountPercent, AfterDiscount) values(@x,@y,@a,@b,@c,@d,@e,@f,@g,@h,@i,@j,@k,@l,0,getDate(),0,0,0)";
                conn.Open();
                SqlCommand cmd = new SqlCommand(strSQL, conn);
                cmd.Parameters.AddWithValue("@x", OrderItem.Item("ProductNumber").ToString());
                cmd.Parameters.AddWithValue("@y", OrderItem.Item("Name").ToString());
                cmd.Parameters.AddWithValue("@a", OrderItem.Item("Category").ToString());
                cmd.Parameters.AddWithValue("@b", OrderItem.Item("Price").ToString());
                cmd.Parameters.AddWithValue("@c", OrderId);
                cmd.Parameters.AddWithValue("@d", OrderItem.Item("TableNumber").ToString());
                cmd.Parameters.AddWithValue("@e", OrderItem.Item("WaiterName").ToString());
                cmd.Parameters.AddWithValue("@f", OrderItem.Item("CashierName").ToString());
                cmd.Parameters.AddWithValue("@g", OrderItem.Item("DateAndTime").ToString());
                cmd.Parameters.AddWithValue("@h", OrderItem.Item("isActive").ToString());
                cmd.Parameters.AddWithValue("@i", OrderItem.Item("isCoocked").ToString());
                cmd.Parameters.AddWithValue("@j", OrderItem.Item("isPaid").ToString());
                cmd.Parameters.AddWithValue("@k", OrderItem.Item("isYesCanceled").ToString());
                cmd.Parameters.AddWithValue("@l", OrderItem.Item("ProductQuantity").ToString());
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            //ProductNumber As [String], Name As [String], Category As [String], Price As [String], OrderId As [String]'
            //this is the bridge to database\

            string json = "{\"result\":\"1\", \"exception\":" + "" + "\"" + "NULL" + "\"" + "\"}";
            context.Response.Write(strJson);

        }
        catch (Exception ex)
        {
            string json = "{\"result\":\"0\", \"exception\":" + "" + ex.Message + "\"}";
            Context.Response.Write(json); 

        }

1 个答案:

答案 0 :(得分:0)

在c#中,只需添加[],就像访问indexer的元素一样,只需访问listJObject有一个索引器,它接受一个字符串并返回该名称的属性值。因此,您需要这样做:

            cmd.Parameters.AddWithValue("@x", OrderItem["ProductNumber"].ToString()); 

对于cmd.Parameters.AddWithValue()的其他调用也类似。