如何在Web Service方法中序列化参数

时间:2009-10-20 12:41:45

标签: c# wcf serialization

我有这个问题。我用这种方法有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>

我希望我的参数不是这样的:

<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>

如何实现参数的serizalize?预先感谢您的帮助。 问候, 的Georgi

1 个答案:

答案 0 :(得分:0)

您可以删除

nillable="true"

[DataContract]
public class ListOfRequests
{
   DataMember(EmitDefaultValue=false)] 
   public string ListOfRequestsMember;
   // ...
}

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

,则会忽略该数据
  

在.NET Framework中,类型有一个   默认值的概念。对于   例如,对于任何引用类型   默认值为null,对于   整数类型它是0.它是   偶尔需要省略数据   成员来自序列化数据时   它被设置为默认值。去做   这个,设置EmitDefaultValue   属性为假(这是真的   默认值)。

ref