Opc.Ua.XmlEncoder.WriteExtensionObjectBody C# (CSharp) Method

WriteExtensionObjectBody() public method

Writes the body of an ExtensionObject to the stream.
public WriteExtensionObjectBody ( object body ) : void
body object
return void
        public void WriteExtensionObjectBody(object body)
        {            
            // nothing to do for null bodies.
            if (body == null)
            {
                return;
            }

            // encode byte body.
            byte[] bytes = body as byte[];

            if (bytes != null)
            {
                m_writer.WriteStartElement("ByteString", Namespaces.OpcUaXsd);
                m_writer.WriteString(Convert.ToBase64String(bytes));                                        
                m_writer.WriteEndElement();
                return;
            }
            
            // encode xml body.
            XmlElement xml = body as XmlElement;

            if (xml != null)
            {
                XmlReader reader = XmlReader.Create(new StringReader(xml.OuterXml));
                m_writer.WriteNode(reader, false);
                reader.Dispose();
                return;
            }

            IEncodeable encodeable = body as IEncodeable;

            if (encodeable == null)
            {
                throw new ServiceResultException(
                    StatusCodes.BadEncodingError,
                    Utils.Format("Don't know how to encode extension object body with type '{0}'.", body.GetType().FullName));
            }
            
            // encode extension object in xml.
            XmlQualifiedName xmlName = EncodeableFactory.GetXmlName(encodeable.GetType());
            m_writer.WriteStartElement(xmlName.Name, xmlName.Namespace);
            encodeable.Encode(this);
            m_writer.WriteEndElement();
        }
        #endregion

Usage Example

コード例 #1
0
ファイル: EncodableObject.cs プロジェクト: yuriik83/UA-.NET
        /// <summary>
        /// Encodes the object in XML.
        /// </summary>
        public static XmlElement EncodeXml(IEncodeable encodeable, ServiceMessageContext context)
        {
            // create encoder.
            XmlEncoder encoder = new XmlEncoder(context);
            
            // write body.
            encoder.WriteExtensionObjectBody(encodeable);

            // create document from encoder.
            XmlDocument document = new XmlDocument();
            document.InnerXml = encoder.Close();

            // return root element.
            return document.DocumentElement;
        }