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