C# WCF Rest服务将Json对象列表作为参数

C# WCF Rest服务将Json对象列表作为参数,c#,json,rest,wcf,oracle12c,C#,Json,Rest,Wcf,Oracle12c,我正在尝试使用WCF Rest服务将假日列表插入Oracle 12c DB中的假日表中。当我运行我的服务时,我没有收到错误,但是在我运行服务时没有插入数据。 我认为我的cmdStr和UpdateHoliday()存在问题。非常感谢您的帮助。谢谢 IService1.cs public interface IService1 { [OperationContract()] [WebInvoke(UriTemplate = "UpdateHoliday", ResponseForma

我正在尝试使用WCF Rest服务将假日列表插入Oracle 12c DB中的假日表中。当我运行我的服务时,我没有收到错误,但是在我运行服务时没有插入数据。 我认为我的cmdStr和UpdateHoliday()存在问题。非常感谢您的帮助。谢谢

IService1.cs

public interface IService1
{
    [OperationContract()]
    [WebInvoke(UriTemplate = "UpdateHoliday", ResponseFormat = WebMessageFormat.Json, Method = "POST")]
    void UpdateHoliday(List<Holiday> Holidays);
}


[DataContract]
public class Holiday
{
    [DataMember(Order = 0)]
    public string HOLIDAY { get; set; }

    [DataMember(Order = 1)]
    public string DESCRIPTION { get; set; }

    public List<Holiday> Holidays { get; set; }
}

public class ListofHoliday
{
    [DataMember]
    List<Holiday> Holidays { get; set; }
}
    public class Service1 : IService1
{
    public void UpdateHoliday(List<Holiday> Holidays)
    {
        List<ListofHoliday> firstStringList = new List<ListofHoliday>();
        string cmdStr = String.Format("INSERT INTO HOLIDAY (HOLIDAY, Description)" +
                                   " VALUES('HOLIDAY','Description')");

        foreach (var item in firstStringList)
        {
            (new DbHelper()).SqlExecute(cmdStr);
        }
    }


}
public class Service1 : IService1
{
    public void UpdateHoliday(List<Holiday> Holidays)
    {
        if (Holidays == null)
            throw new ArgumentNullException("Holidays");

        foreach (var item in Holidays)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("INSERT INTO HOLIDAY (HOLIDAY, DESCRIPTION) VALUES ");
            sb.AppendFormat("( '{0}', '{1}')",
                item.HOLIDAY, item.DESCRIPTION);
            //sb.AppendFormat(";");
            (new DbHelper()).SqlExecute(sb.ToString());
        }
    }


}
我终于找到了一个办法使它发挥作用。变化如下: 服务1.cs

public interface IService1
{
    [OperationContract()]
    [WebInvoke(UriTemplate = "UpdateHoliday", ResponseFormat = WebMessageFormat.Json, Method = "POST")]
    void UpdateHoliday(List<Holiday> Holidays);
}


[DataContract]
public class Holiday
{
    [DataMember(Order = 0)]
    public string HOLIDAY { get; set; }

    [DataMember(Order = 1)]
    public string DESCRIPTION { get; set; }

    public List<Holiday> Holidays { get; set; }
}

public class ListofHoliday
{
    [DataMember]
    List<Holiday> Holidays { get; set; }
}
    public class Service1 : IService1
{
    public void UpdateHoliday(List<Holiday> Holidays)
    {
        List<ListofHoliday> firstStringList = new List<ListofHoliday>();
        string cmdStr = String.Format("INSERT INTO HOLIDAY (HOLIDAY, Description)" +
                                   " VALUES('HOLIDAY','Description')");

        foreach (var item in firstStringList)
        {
            (new DbHelper()).SqlExecute(cmdStr);
        }
    }


}
public class Service1 : IService1
{
    public void UpdateHoliday(List<Holiday> Holidays)
    {
        if (Holidays == null)
            throw new ArgumentNullException("Holidays");

        foreach (var item in Holidays)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("INSERT INTO HOLIDAY (HOLIDAY, DESCRIPTION) VALUES ");
            sb.AppendFormat("( '{0}', '{1}')",
                item.HOLIDAY, item.DESCRIPTION);
            //sb.AppendFormat(";");
            (new DbHelper()).SqlExecute(sb.ToString());
        }
    }


}
公共类服务1:IService1
{
公共作废更新假日(列出假日)
{
如果(假日==null)
抛出新的异常(“假日”);
foreach(假期中的var项目)
{
StringBuilder sb=新的StringBuilder();
sb.附加(“插入假日(假日、说明)值”);
sb.AppendFormat(“{0},{1}”),
item.HOLIDAY,item.DESCRIPTION);
//(b)以“;”号填列格式;
(新的DbHelper()).SqlExecute(sb.ToString());
}
}
}

如何在您的服务操作中尝试此代码。如果下面的代码可以工作,那么为了让DBHelper接受带有参数的命令,您还需要做一些工作

public class Service1 : IService1
{
    public void UpdateHoliday(List<Holiday> Holidays)
    {
        if(Holidays==null)
           throw new ArgumentNullException("Holidays");

        string cmdStr = String.Format("INSERT INTO HOLIDAY (HOLIDAY, Description)" +
                                   " VALUES('HOLIDAY','Description')");

        foreach (var item in Holidays)
        {
            (new DbHelper()).SqlExecute(cmdStr);
        }
    }


} 
公共类服务1:IService1
{
公共作废更新假日(列出假日)
{
如果(假日==null)
抛出新的异常(“假日”);
string cmdStr=string.Format(“插入假日(假日,说明)”+
“值(‘假日’、‘说明’)”;
foreach(假期中的var项目)
{
(新的DbHelper()).SqlExecute(cmdStr);
}
}
} 

有错误指示器吗?我根本没有收到任何错误。在发送Json对象列表之后,我得到的唯一结果是“响应为空”。如果它起作用,这是预期的:|我不知道您在服务操作循环中试图做什么,但是,有了这些代码,就永远不会插入任何内容。您正在创建一个空列表,然后对其进行迭代,并在每次迭代中插入相同的值。一旦对空列表求值,for循环就会中断。那是你期望的吗?不,那不是我打算做的。谢谢你指出这一点。我想做的是接收一个对象列表并将其插入我的表“HOLIDAY”。我希望我的方法获取这些输入参数并将它们插入Holiday表。您有什么建议让列表不为空并插入对象列表中的数据吗。我在下面发布了UpdateHoliday()的更新代码。我的方向正确吗?public void UpdateHoliday(列出假日){string cmdStr=string.Format(“插入假日(假日,描述)”+“值({0},{1}”)”);foreach(假日中的变量项){(new DbHelper()).SqlExecute(cmdStr);}}如果(Holiday==null)部分给我一个错误:“Holiday是在给定上下文中无效的类型”。另一个问题是我希望值(“假日”,“描述”)来自参数输入。它应该是(假日==null),我更新答案。至于参数,有一种很好的方法可以使用参数清除内联sql字符串。我已经很久没有使用内联命令了,所以我必须查找如何参数化SqlCommand。我为您找到了一个在线参考-->非常感谢Ross,您的帮助救了我一天!我正在查看参考资料!