C# 如何序列化Web服务方法中的参数
我有这个问题。我有一个WCF.Net 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,
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;
// ...
}