/// <summary>
/// Converts a VARIANT value to a Builtin Type.
/// </summary>
private object VariantValueToScalarValue(object value, NodeId builtinTypeId)
{
switch ((uint)builtinTypeId.Identifier)
{
case DataTypes.Guid:
{
return new Uuid((string)value);
}
case DataTypes.XmlElement:
{
XmlDocument document = new XmlDocument();
document.InnerXml = (string)value;
return document.DocumentElement;
}
case DataTypes.NodeId:
{
return NodeId.Parse((string)value);
}
case DataTypes.ExpandedNodeId:
{
return ExpandedNodeId.Parse((string)value);
}
case DataTypes.QualifiedName:
{
return QualifiedName.Parse((string)value);
}
case DataTypes.LocalizedText:
{
return new LocalizedText(ComUtils.GetLocale(m_lcid), (string)value);
}
case DataTypes.StatusCode:
{
return new StatusCode((uint)value);
}
case DataTypes.DiagnosticInfo:
{
BinaryDecoder decoder = new BinaryDecoder((byte[])value, m_session.MessageContext);
DiagnosticInfo decodedValue = decoder.ReadDiagnosticInfo(null);
decoder.Close();
return decodedValue;
}
case DataTypes.DataValue:
{
BinaryDecoder decoder = new BinaryDecoder((byte[])value, m_session.MessageContext);
DataValue decodedValue = decoder.ReadDataValue(null);
decoder.Close();
return decodedValue;
}
case DataTypes.Structure:
{
BinaryDecoder decoder = new BinaryDecoder((byte[])value, m_session.MessageContext);
ExtensionObject decodedValue = decoder.ReadExtensionObject(null);
decoder.Close();
return decodedValue;
}
}
return value;
}