从 WCF 请求中删除 nill="True"

Removing nill="True" from WCF Request

我在我的应用程序中使用 WCF web 服务,同时我正在发送一个请求,我正在使用 fiddler 监视请求和响应。问题是空标签,wcf 客户端生成 nil=true 属性。无论如何我可以将它们更改为空白标签吗? 这是例子

<a:Seats i:nil="true" />

这是座位列表class,它是可选标签,因此没有必要传递它。但是当我像上面那样发送请求时,我收到来自网络服务的 Object reference not set to an instance of an object 响应。我被要求从请求中删除 nill 属性。所以一定要变成这样

<a:Seats/>

添加 EmitDefaultValue=false 将完全删除标签,因此这不是答案。我怎样才能做到这一点 ?

如果我正确理解您的场景,您希望将“座位列表 class”(例如 List<Seat>)表示为 "empty" 而不是 null

WCF 序列化程序只允许对象序列化为“空白”值,前提是该对象具有“有效”空白值(例如 string 可以为空白或 null)。 xsi:nil 表示元素在没有内容的情况下有效,即使该基础对象的数据类型不允许空元素。

如果您想强制 WCF 客户端发送空元素,您可以实现自定义消息检查器以在发送之前修改消息。

参考 How to inspect and modify WCF message via custom MessageInspector 了解更多信息。

我自己想出来,

我重新配置了 ServiceReference 并将集合类型更改为 System.Collection.Generic.List(最初是 System.Array

然后当我想发出请求时,只需像下面这样初始化请求对象

rq.Seats = new List<Seat>();   // result <a:Seats/>

我知道这很奇怪但是当它是数组时结果不同

rq.Seats = new seat[] { } ;    //result <a:Seats nil="true" />

我自己想出来的

在 WCF 请求中 xml 元素为 NULL 的情况下避免此问题

使用 XML 节点上方的属性

 [XmlElement(IsNullable = true)]