从 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)]
我在我的应用程序中使用 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)]