我为SOAP服务创建了一个WCF客户端,其架构中包含以下类型:
<xs:element name="foo" nillable="true">
<xs:complexType>
<xs:sequence>
<xs:element name="bar" type="xs:string"/>
</xs:sequence>
<xs:anyAttribute namespace="##other"/>
</xs:complexType>
</xs:element>
.NET生成以下类:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.1098.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://example.com/ws/entity")]
public partial class foo : object {
private string barField;
private System.Xml.XmlAttribute[] anyAttrField;
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public string bar {
get { return this.barField; }
set { this.barField = value; }
}
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
public System.Xml.XmlAttribute[] AnyAttr {
get { return this.anyAttrField; }
set { this.anyAttrField = value; }
}
}
在此类上填充AnyAttr属性的推荐方法是什么?我可以找到创建XmlAttribute
的唯一方法来自现有的XmlDocument
,在这种情况下不会创建,直到对象在出路时序列化为止。
我开始尝试在BeforeSendRequest
中的IClientMessageInspector
中添加一个属性,但我找到修改原始XmlDocument
的唯一方法是创建一个Message
,转换它,然后替换原始消息,这似乎只是为了添加属性而做了很多工作。
最终,我尝试创建看起来像这样的XML:
...
<foo xmlns:ns2="http://example.com/ws/ext" ns2:other="some other value">
<bar>some value</bar>
</foo>
...
答案 0 :(得分:0)
我拥有定义Foo
的服务,虽然我无法修改Foo
本身,但我可以将自定义元素添加到架构中。因此,我没有尝试使用模式中的现有xs:anyAttribute
,而是为我的数据添加了一个新元素。