Visual Studio 2019 WSDL如何使用<any>元素
Visual Studio 2019 WSDL how to use <any> element
我正在使用此 ONVIF 服务:https://www.onvif.org/ver10/media/wsdl/media.wsdl 使用 Visual Studio 2019,它会自动从 WSDL 文件生成客户端包装器。
我不知道如何使用 OSDTextConfiguration 的 'Extension' 元素向 OSDTextConfiguration 添加 WSDL 中未指定的元素。
<xs:complexType name="OSDTextConfiguration">
...
<xs:element name="Extension" type="tt:OSDTextConfigurationExtension" minOccurs="0"/>
</xs:complexType>
<xs:complexType name="OSDTextConfigurationExtension">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first Vendor then ONVIF -->
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
这是定义类型的完整文件:
https://www.onvif.org/ver10/schema/onvif.xsd?ccc393&ccc393
Visual Studio 定义了下面的代码,我想我应该可以使用 XmlAnyElementAttribute() 添加我的元素,但我不知道该怎么做。谁能指出我正确的方向?
public partial class OSDConfigurationExtension : object, System.ComponentModel.INotifyPropertyChanged {
private System.Xml.XmlElement[] anyField;
private System.Xml.XmlAttribute[] anyAttrField;
/// <remarks/>
[System.Xml.Serialization.XmlAnyElementAttribute(Order=0)]
public System.Xml.XmlElement[] Any {
get {
return this.anyField;
}
set {
this.anyField = value;
this.RaisePropertyChanged("Any");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
public System.Xml.XmlAttribute[] AnyAttr {
get {
return this.anyAttrField;
}
set {
this.anyAttrField = value;
this.RaisePropertyChanged("AnyAttr");
}
}
我想出了一个方法来做到这一点,post 在这里,以防它对其他人有用。下面的函数插入一个值为“0”或“1”的元素 'IsPersistent'。
internal static void SetOverlayPersistent(bool isPesistent, OSDConfiguration osd)
{
osd.Extension = new OSDConfigurationExtension();
System.Xml.XmlDocument xmlDoc2 = new System.Xml.XmlDocument();
System.Xml.XmlElement elem = xmlDoc2.CreateElement("IsPersistent", "http://www.onvif.org/ver10/schema");
elem.InnerText = isPesistent ? "1" : "0";
osd.Extension.Any = new System.Xml.XmlElement[1];
osd.Extension.Any[0] = elem;
}
我正在使用此 ONVIF 服务:https://www.onvif.org/ver10/media/wsdl/media.wsdl 使用 Visual Studio 2019,它会自动从 WSDL 文件生成客户端包装器。
我不知道如何使用 OSDTextConfiguration 的 'Extension' 元素向 OSDTextConfiguration 添加 WSDL 中未指定的元素。
<xs:complexType name="OSDTextConfiguration">
...
<xs:element name="Extension" type="tt:OSDTextConfigurationExtension" minOccurs="0"/>
</xs:complexType>
<xs:complexType name="OSDTextConfigurationExtension">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first Vendor then ONVIF -->
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
这是定义类型的完整文件: https://www.onvif.org/ver10/schema/onvif.xsd?ccc393&ccc393
Visual Studio 定义了下面的代码,我想我应该可以使用 XmlAnyElementAttribute() 添加我的元素,但我不知道该怎么做。谁能指出我正确的方向?
public partial class OSDConfigurationExtension : object, System.ComponentModel.INotifyPropertyChanged {
private System.Xml.XmlElement[] anyField;
private System.Xml.XmlAttribute[] anyAttrField;
/// <remarks/>
[System.Xml.Serialization.XmlAnyElementAttribute(Order=0)]
public System.Xml.XmlElement[] Any {
get {
return this.anyField;
}
set {
this.anyField = value;
this.RaisePropertyChanged("Any");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
public System.Xml.XmlAttribute[] AnyAttr {
get {
return this.anyAttrField;
}
set {
this.anyAttrField = value;
this.RaisePropertyChanged("AnyAttr");
}
}
我想出了一个方法来做到这一点,post 在这里,以防它对其他人有用。下面的函数插入一个值为“0”或“1”的元素 'IsPersistent'。
internal static void SetOverlayPersistent(bool isPesistent, OSDConfiguration osd)
{
osd.Extension = new OSDConfigurationExtension();
System.Xml.XmlDocument xmlDoc2 = new System.Xml.XmlDocument();
System.Xml.XmlElement elem = xmlDoc2.CreateElement("IsPersistent", "http://www.onvif.org/ver10/schema");
elem.InnerText = isPesistent ? "1" : "0";
osd.Extension.Any = new System.Xml.XmlElement[1];
osd.Extension.Any[0] = elem;
}