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