Opc.Ua.JsonEncoder.WriteVariantContents C# (CSharp) Method

WriteVariantContents() public method

Writes the contents of an Variant to the stream.
public WriteVariantContents ( object value, TypeInfo typeInfo ) : void
value object
typeInfo TypeInfo
return void
        public void WriteVariantContents(object value, TypeInfo typeInfo)
        {
            // check for null.
            if (value == null)
            {
                return;
            }
            
            m_commaRequired = false;

            // write scalar.
            if (typeInfo.ValueRank < 0)
            {
                switch (typeInfo.BuiltInType)
                {
                    case BuiltInType.Boolean: { WriteBoolean(null, (bool)value); return; }
                    case BuiltInType.SByte: { WriteSByte(null, (sbyte)value); return; }
                    case BuiltInType.Byte: { WriteByte(null, (byte)value); return; }
                    case BuiltInType.Int16: { WriteInt16(null, (short)value); return; }
                    case BuiltInType.UInt16: { WriteUInt16(null, (ushort)value); return; }
                    case BuiltInType.Int32: { WriteInt32(null, (int)value); return; }
                    case BuiltInType.UInt32: { WriteUInt32(null, (uint)value); return; }
                    case BuiltInType.Int64: { WriteInt64(null, (long)value); return; }
                    case BuiltInType.UInt64: { WriteUInt64(null, (ulong)value); return; }
                    case BuiltInType.Float: { WriteFloat(null, (float)value); return; }
                    case BuiltInType.Double: { WriteDouble(null, (double)value); return; }
                    case BuiltInType.String: { WriteString(null, (string)value); return; }
                    case BuiltInType.DateTime: { WriteDateTime(null, (DateTime)value); return; }
                    case BuiltInType.Guid: { WriteGuid(null, (Uuid)value); return; }
                    case BuiltInType.ByteString: { WriteByteString(null, (byte[])value); return; }
                    case BuiltInType.XmlElement: { WriteXmlElement(null, (XmlElement)value); return; }
                    case BuiltInType.NodeId: { WriteNodeId(null, (NodeId)value); return; }
                    case BuiltInType.ExpandedNodeId: { WriteExpandedNodeId(null, (ExpandedNodeId)value); return; }
                    case BuiltInType.StatusCode: { WriteStatusCode(null, (StatusCode)value); return; }
                    case BuiltInType.QualifiedName: { WriteQualifiedName(null, (QualifiedName)value); return; }
                    case BuiltInType.LocalizedText: { WriteLocalizedText(null, (LocalizedText)value); return; }
                    case BuiltInType.ExtensionObject: { WriteExtensionObject(null, (ExtensionObject)value); return; }
                    case BuiltInType.DataValue: { WriteDataValue(null, (DataValue)value); return; }
                    case BuiltInType.Enumeration: { WriteInt32(null, (int)value); return; }
                }
            }
                
            // write array.
            else if (typeInfo.ValueRank <= 1)
            {
                switch (typeInfo.BuiltInType)
                {
                    case BuiltInType.Boolean: { WriteBooleanArray(null, (bool[])value); return; }
                    case BuiltInType.SByte: { WriteSByteArray(null, (sbyte[])value); return; }
                    case BuiltInType.Byte: { WriteByteArray(null, (byte[])value); return; }
                    case BuiltInType.Int16: { WriteInt16Array(null, (short[])value); return; }
                    case BuiltInType.UInt16: { WriteUInt16Array(null, (ushort[])value); return; }
                    case BuiltInType.Int32: { WriteInt32Array(null, (int[])value); return; }
                    case BuiltInType.UInt32: { WriteUInt32Array(null, (uint[])value); return; }
                    case BuiltInType.Int64: { WriteInt64Array(null, (long[])value); return; }
                    case BuiltInType.UInt64: { WriteUInt64Array(null, (ulong[])value); return; }
                    case BuiltInType.Float: { WriteFloatArray(null, (float[])value); return; }
                    case BuiltInType.Double: { WriteDoubleArray(null, (double[])value); return; }
                    case BuiltInType.String: { WriteStringArray(null, (string[])value); return; }
                    case BuiltInType.DateTime: { WriteDateTimeArray(null, (DateTime[])value); return; }
                    case BuiltInType.Guid: { WriteGuidArray(null, (Uuid[])value); return; }
                    case BuiltInType.ByteString: { WriteByteStringArray(null, (byte[][])value); return; }
                    case BuiltInType.XmlElement: { WriteXmlElementArray(null, (XmlElement[])value); return; }
                    case BuiltInType.NodeId: { WriteNodeIdArray(null, (NodeId[])value); return; }
                    case BuiltInType.ExpandedNodeId: { WriteExpandedNodeIdArray(null, (ExpandedNodeId[])value); return; }
                    case BuiltInType.StatusCode: { WriteStatusCodeArray(null, (StatusCode[])value); return; }
                    case BuiltInType.QualifiedName: { WriteQualifiedNameArray(null, (QualifiedName[])value); return; }
                    case BuiltInType.LocalizedText: { WriteLocalizedTextArray(null, (LocalizedText[])value); return; }
                    case BuiltInType.ExtensionObject: { WriteExtensionObjectArray(null, (ExtensionObject[])value); return; }
                    case BuiltInType.DataValue: { WriteDataValueArray(null, (DataValue[])value); return; }
                        
                    case BuiltInType.Enumeration: 
                    {
                        Enum[] enums = value as Enum[];
                        string[] values = new string[enums.Length];

                        for (int ii = 0; ii < enums.Length; ii++)
                        {
                            string text = enums[ii].ToString();
                            text += "_";
                            text += ((int)(object)enums[ii]).ToString(CultureInfo.InvariantCulture);
                            values[ii] = text;
                        }

                        WriteStringArray(null, values);
                        return; 
                    }

                    case BuiltInType.Variant:
                    {
                        Variant[] variants = value as Variant[];

                        if (variants != null)
                        {
                            WriteVariantArray(null, variants);
                            return;
                        }

                        object[] objects = value as object[];

                        if (objects != null)
                        {
                            WriteObjectArray(null, objects);
                            return;
                        }

                        throw ServiceResultException.Create(
                            StatusCodes.BadEncodingError,
                            "Unexpected type encountered while encoding an array of Variants: {0}",
                            value.GetType());
                    }
                }
            }

            // write matrix.
            else if (typeInfo.ValueRank > 1)
            {
                WriteMatrix(null, (Matrix)value);
                return;
            }

            // oops - should never happen.
            throw new ServiceResultException(
                StatusCodes.BadEncodingError,
                Utils.Format("Type '{0}' is not allowed in an Variant.", value.GetType().FullName));
        }
        #endregion