Visual Studio 2019 WSDL как использовать элемент

#c# #visual-studio #wsdl #onvif

Вопрос:

Я использую эту услугу ONVIF: https://www.onvif.org/ver10/media/wsdl/media.wsdl использование Visual Studio 2019, которая автоматически создает оболочку клиента из файла WSDL.

Я не могу понять, как использовать элемент «Расширение» OSDTextConfiguration для добавления элемента в OSDTextConfiguration, который не был указан в WSDL.

 lt;xs:complexType name="OSDTextConfiguration"gt;  ...  lt;xs:element name="Extension" type="tt:OSDTextConfigurationExtension" minOccurs="0"/gt; lt;/xs:complexTypegt;  lt;xs:complexType name="OSDTextConfigurationExtension"gt;  lt;xs:sequencegt;  lt;xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/gt; lt;!-- first Vendor then ONVIF --gt;  lt;/xs:sequencegt;  lt;xs:anyAttribute processContents="lax"/gt; lt;/xs:complexTypegt;  

Это полный файл, в котором определены типы: https://www.onvif.org/ver10/schema/onvif.xsd?ccc393amp;ccc393

Visual Studio определила приведенный ниже код, и я предполагаю, что смогу использовать атрибут XmlAnyElementAttribute() для добавления своего элемента, но я не знаю, как это сделать. Может ли кто-нибудь указать мне правильное направление?

 public partial class OSDConfigurationExtension : object, System.ComponentModel.INotifyPropertyChanged {  private System.Xml.XmlElement[] anyField;  private System.Xml.XmlAttribute[] anyAttrField;  /// lt;remarks/gt; [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] public System.Xml.XmlElement[] Any {  get {  return this.anyField;  }  set {  this.anyField = value;  this.RaisePropertyChanged("Any");  } }  /// lt;remarks/gt; [System.Xml.Serialization.XmlAnyAttributeAttribute()] public System.Xml.XmlAttribute[] AnyAttr {  get {  return this.anyAttrField;  }  set {  this.anyAttrField = value;  this.RaisePropertyChanged("AnyAttr");  } }  

Ответ №1:

Я придумал, как это сделать, и разместил его здесь на случай, если он будет полезен кому-то еще. Функция ниже вставляет элемент «IsPersistent» со значением «0» или «1».

 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;  }