Visual Studio 2019调用ONVIF服务时OSDTextConfiguration的<any>元素使用问题
实现步骤
你可以按照以下方式构造自定义扩展元素,直接赋值给自动生成类的Any/AnyAttr属性即可,序列化时会自动嵌入到请求报文中:
using System.Xml; // 1. 初始化XmlDocument用于构造XML节点 XmlDocument xmlDoc = new XmlDocument(); // 2. 构造自定义元素,示例为添加厂商自定义的字体大小配置 // 第二个参数为自定义命名空间,按对接设备的厂商要求填写即可,无特殊要求可留空 XmlElement customFontSizeEle = xmlDoc.CreateElement("CustomFontSize", ""); customFontSizeEle.InnerText = "36"; // 如需添加自定义属性,可按以下方式构造 XmlAttribute customDisplayAttr = xmlDoc.CreateAttribute("EnableCustomDisplay"); customDisplayAttr.Value = "1"; // 3. 实例化ONVIF扩展类,若你项目中生成的类名为OSDConfigurationExtension,直接替换类名即可 var osdTextExt = new OSDTextConfigurationExtension(); // 多个自定义元素直接追加到数组中即可 osdTextExt.Any = new XmlElement[] { customFontSizeEle }; // 自定义属性赋值到AnyAttr数组 osdTextExt.AnyAttr = new XmlAttribute[] { customDisplayAttr }; // 4. 关联到OSD配置对象 var osdTextConfig = new OSDTextConfiguration(); osdTextConfig.Extension = osdTextExt; // 后续正常调用ONVIF对应的SetOSD等接口传入osdTextConfig即可
注意事项
- 自定义元素和属性的命名、取值要符合你对接的ONVIF设备厂商的扩展规范,避免设备不识别
- 支持同时添加多个自定义元素,直接把构造好的
XmlElement对象放到Any数组中即可,序列化时会按顺序输出到Extension节点下 - 该实现完全符合ONVIF的XSD扩展规则,不会出现序列化报错的问题
内容的提问来源于stack exchange,提问作者Vincentz
相关产品推荐
相关产品推荐

