C# 如何生成具有属性的xsi:nil元素?
我有一个WCF客户端,需要生成包含以下XML片段的请求:C# 如何生成具有属性的xsi:nil元素?,c#,wcf,xmlserializer,xsi,xml-nil,C#,Wcf,Xmlserializer,Xsi,Xml Nil,我有一个WCF客户端,需要生成包含以下XML片段的请求: <reason xsi:nil="true" nullFlavor="NA" typeCode="RSON" /> 架构由服务器确定,不在我的控制之下。生成的代理代码有一个用于reason元素的类,其中包含属性nullFlavor和typeCode。代理使用XmlSerializer 如何生成这样的片段?只有当对应的成员为null时,XmlSerializer才会发出xsi:nil属性。如果它为null,它就不能很好地具
<reason xsi:nil="true" nullFlavor="NA" typeCode="RSON" />
架构由服务器确定,不在我的控制之下。生成的代理代码有一个用于reason元素的类,其中包含属性nullFlavor
和typeCode
。代理使用XmlSerializer
如何生成这样的片段?只有当对应的成员为null时,XmlSerializer才会发出xsi:nil
属性。如果它为null,它就不能很好地具有将作为属性发出的属性
顺便说一句,根据XML模式实例规范,该片段是合法的,该规范规定nil元素不能包含任何子元素或内部文本,但可能包含属性。这是XmlSerializer的已知限制。您可以通过巧妙地使用IXmlSerializable接口并手动发送XML来解决这个问题—不幸的是,据我所知,没有一个干净的解决方案。以下是我为那些仍在努力解决这个问题的人使用的解决方案。这是一个有点黑客,但它的工作。关闭nillable并添加和属性,如下所示
[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
get
{
return this.nillAtt;
}
set
{
nillAtt = value;
}
}
这在简单序列化/反序列化xml消息时非常有用,但嵌入到WCF请求中,这会导致WSDL被视为无效:System.InvalidOperationException:命名空间“”中名为“nil”的架构项“属性”。属性声明的目标命名空间(本地或全局)不得匹配。