C# 将输入设为可选的Web服务字段(非必需)

C# 将输入设为可选的Web服务字段(非必需),c#,json,web-services,visual-studio-2010,C#,Json,Web Services,Visual Studio 2010,我创建了一个示例Web服务,它将要求用户提供一些信息,并以JSON形式返回所需的所有信息。我这里有两个问题 我不想要求用户输入新的日期和续约日期,我只想让其中一个是必需的,而另一个是可选的 如果输入了两个日期,new和renewal,那么用户将在一个JSON中获得所有信息,但我不确定如何将这两个列表附加在一起 如果您需要其他信息,请告诉我,这是我的Web服务代码 namespace WebServiceTest { /// <summary>

我创建了一个示例Web服务,它将要求用户提供一些信息,并以JSON形式返回所需的所有信息。我这里有两个问题

  • 我不想要求用户输入新的日期和续约日期,我只想让其中一个是必需的,而另一个是可选的
  • 如果输入了两个日期,new和renewal,那么用户将在一个JSON中获得所有信息,但我不确定如何将这两个列表附加在一起
  • 如果您需要其他信息,请告诉我,这是我的Web服务代码

        namespace WebServiceTest
        {
            /// <summary>
            /// Summary description for WebServicePrueba
            /// </summary>
            [WebService(Namespace = "http://tempuri.org/")]
            [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
            [System.ComponentModel.ToolboxItem(false)]
            // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
            // [System.Web.Script.Services.ScriptService]
            public class WebServicePrueba : System.Web.Services.WebService
            {
                private string User { get; set; }
                private string UserID { get; set; }
                private DateTime NewServiceDate { get; set; }
                private DateTime NewServicesTo { get; set; }
                private DateTime RenewServiceDate { get; set; }
                private DateTime RenewServiceTo { get; set; }
    
                [System.Web.Services.WebMethod(Description = "Get Services Received", EnableSession = true)]
                public string getSeviceInformation(string name, string userId, DateTime newServiceDate, DateTime newServicesTo, DateTime renewServiceDate, DateTime renewServiceTo)
                {
                    User = name;
                    UserID = userId;
                    NewServiceDate = newServiceDate;
                    NewServicesTo = newServicesTo;
                    RenewServiceDate = renewServiceDate;
                    RenewServiceTo = renewServiceTo;
    
                    if (User == "prueba" && UserID == "prueba")
                    {
                        if (renewServiceDate == DateTime.MinValue || renewServiceTo == DateTime.MinValue)
                        {
                            ArrayList list = this.participant.getAddedTRCTest(newServiceDate, newServicesTo);
                            return JsonConvert.SerializeObject(list);
                        }
    
                        else if (newServiceDate == DateTime.MinValue || newServicesTo == DateTime.MinValue)
                        {
                            ArrayList list = this.participant.getModifiedTRCTest(renewServiceDate, renewServiceTo);
                            return JsonConvert.SerializeObject(list);
                        }
    
                        else
                        {
                            ArrayList list = this.participant.getAddedTRCTest(newServiceDate, newServicesTo);
                            ArrayList list2 = this.participant.getModifiedTRCTest(renewServiceDate, renewServiceTo);
                            return JsonConvert.SerializeObject(list);
                        }
    
                    }
    
                    else if (User != "prueba" && UserID == "prueba")
                    {
                        return "Please check your username";
                    }
    
                    else if (User == "prueba" && UserID != "prueba")
                    {
                        return "Please check your UserID";
                    }
    
                    else
                    {
                        return "Please check both your username and userID";
                    }
                }
    
            }
        }
    
    ------------------------------------更新----------------------

    @刘建平当我在函数中声明可为空的参数时,我无法再测试webservice,我得到 `试验

    测试表单仅适用于以基元类型作为参数的方法` 我是这样宣布的

     [System.Web.Services.WebMethod(Description = "Get Services Received", EnableSession = true)]
          public string getSeviceInformation(string name, string userId, DateTime? newServiceDate, DateTime? newServicesTo, DateTime? renewServiceDate, DateTime? renewServiceTo)
    

    您可以为4 DateTime使用可为null的变量

    private DateTime? NewServiceDate { get; set; }
    private DateTime? NewServicesTo { get; set; }
    private DateTime? RenewServiceDate { get; set; }
    private DateTime? RenewServiceTo { get; set; }
    
    并使用NewServiceDate.HasValue检查它是否包含值

  • 使用可为空的日期时间
  • getSeviceInformation方法的签名: 公共字符串getSeviceInformation(字符串名称、字符串用户ID、DateTime?newServiceDate、DateTime?NewServiceTo、DateTime?RenewalServiceDate、DateTime?RenewalServiceTo)

  • 检查哪些日期有值
    如果(newServiceDate.HasValue)。。。。在这里做点什么

    我做了更改,但仍然得到相同的错误。需要如何输入DateTime的输入。我尝试了
    10/17/2013
    10/17/2013
    2013-10-17
    2013-10-18
    。我还需要做其他的修改吗?因为当我运行服务而不必输入续费日期,并且我使用
    2013-10-17
    2013-10-18
    时,服务将运行。@Tavo您的函数中还需要可为空的参数。公共字符串getSeviceInformation(字符串名称、字符串用户ID、DateTime?newServiceDate、DateTime?NewServiceTo、DateTime?RenewalServiceDate、DateTime?RenewalServiceTo)和您的DateTime格式需要与服务器机器的DateTime格式相同。否则,可以将字符串传递给函数,然后在函数中将字符串转换为datatime
    private DateTime? NewServiceDate { get; set; }
    private DateTime? NewServicesTo { get; set; }
    private DateTime? RenewServiceDate { get; set; }
    private DateTime? RenewServiceTo { get; set; }