Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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
C# 如何序列化Web服务方法中的参数_C#_Wcf_Serialization - Fatal编程技术网

C# 如何序列化Web服务方法中的参数

C# 如何序列化Web服务方法中的参数,c#,wcf,serialization,C#,Wcf,Serialization,我有这个问题。我有一个WCF.Net C#web服务,它使用以下方法: public interface IMyService { // TODO: Add your service operations here [OperationContract] ListOfRequests GetListOfRequests(string par1, string par2,

我有这个问题。我有一个WCF.Net C#web服务,它使用以下方法:

public interface IMyService
{
    // TODO: Add your service operations here
    [OperationContract]
    ListOfRequests GetListOfRequests(string par1,
                                     string par2,
                                     string par3,
                                     DateTime par4,
                                     DateTime par5,
                                     string par6,
                                     string par7);
}
public class MyService : IMyService
{
     public ListOfRequests GetListOfRequests(string par1,
                                 string par2,
                                 string par3,
                                 DateTime par4,
                                 DateTime par5,
                                 string par6,
                                 string par7)
     {
            // .... web method code here;
     }
}
问题在于,当我生成web服务时,wsdl模式会返回以下内容:

<xs:element name="GetListOfRequests">
  <xs:complexType>
   <xs:sequence>
    <xs:element minOccurs="0" name="par1" nillable="true" type="xs:string" /> 
    <xs:element minOccurs="0" name="par2" nillable="true" type="xs:string" /> 
    <xs:element minOccurs="0" name="par3" nillable="true" type="xs:string" /> 
    <xs:element minOccurs="0" name="par4" type="xs:dateTime" /> 
    <xs:element minOccurs="0" name="par5" type="xs:dateTime" /> 
    <xs:element minOccurs="0" name="par6" nillable="true" type="xs:string" /> 
    <xs:element minOccurs="0" name="par7" nillable="true" type="xs:string" /> 
   </xs:sequence>
  </xs:complexType>
  </xs:element>

我希望我的参数不为null,如下所示:

<xs:element name="GetListOfRequests">
  <xs:complexType>
   <xs:sequence>
    <xs:element minOccurs="1" name="par1" nillable="false" type="xs:string" /> 
    <xs:element minOccurs="1" name="par2" nillable="false" type="xs:string" /> 
    <xs:element minOccurs="1" name="par3" nillable="false" type="xs:string" /> 
    <xs:element minOccurs="1" name="par4" type="xs:dateTime" /> 
    <xs:element minOccurs="1" name="par5" type="xs:dateTime" /> 
    <xs:element minOccurs="1" name="par6" nillable="false" type="xs:string" /> 
    <xs:element minOccurs="0" name="par7" nillable="true" type="xs:string" /> 
   </xs:sequence>
  </xs:complexType>
  </xs:element>

如何将参数序列化以实现这一点?提前感谢您的帮助。 当做 Georgi

您可以删除

nillable="true"

这里的问题是string类型的默认值为null。因此,如果将此属性设置为false,则在将其设置为默认值时将忽略数据

在.NET Framework中,类型具有 默认值的概念。对于 例如,对于任何引用类型 默认值为null,对于 整数类型它是0。它是 偶尔需要省略一个数据 当 它被设置为其默认值。做 为此,请设置EmitDefaultValue 属性设置为false(通过 默认值)


Hi,同样的结果。也许我必须更详细地解释我的应用程序。我用struct定义类。Struct有10个元素。我的web服务返回这个类的对象,它是我的方法。该方法获取7个参数,并将它们传递给数据库中的过程。此过程返回11个元素值的数据集。这个类的成员是结构中的这11个元素(“packed”),我可以轻松地对它们进行序列化。问题是我无法序列化我的方法(该类的返回对象)返回的参数。11个元素和8个参数位于两个不同的xsd模式中。
[DataContract]
public class ListOfRequests
{
   DataMember(EmitDefaultValue=false)] 
   public string ListOfRequestsMember;
   // ...
}