Opc.Ua.JsonDecoder.ReadExpandedNodeId C# (CSharp) Method

ReadExpandedNodeId() public method

Reads an ExpandedNodeId from the stream.
public ReadExpandedNodeId ( string fieldName ) : Opc.Ua.ExpandedNodeId
fieldName string
return Opc.Ua.ExpandedNodeId
        public ExpandedNodeId ReadExpandedNodeId(string fieldName)
        {
            object token = null;

            if (!ReadField(fieldName, out token))
            {
                return null;
            }

            var value = token as Dictionary<string, object>;

            if (value == null)
            {
                return null;
            }

            int index = -1;
            string uri = null;
            int serverIndex = -1;

            object field = null;

            if (!value.TryGetValue("Id", out field))
            {
                return null;
            }

            var nid = NodeId.Parse(field as string);

            if (value.TryGetValue("ServerUri", out field))
            {
                serverIndex = m_context.NamespaceUris.GetIndex(field as string);
            }
            else if (value.TryGetValue("ServerIndex", out field))
            {
                var number = field as long?;

                if (number != null)
                {
                    serverIndex = (int)number;
                }
            }

            if (serverIndex > 0)
            {
                if (m_serverMappings != null && index < m_serverMappings.Length)
                {
                    serverIndex = m_serverMappings[serverIndex];
                }
            }

            if (value.TryGetValue("Uri", out field))
            {
                uri = field as string;

                if (serverIndex <= 0)
                {
                    index = m_context.NamespaceUris.GetIndex(uri);
                }
            }

            if (serverIndex == 0)
            {
                if (index < 0)
                {
                    index = nid.NamespaceIndex;
                }

                if (index > 0)
                {
                    if (m_namespaceMappings != null && index < m_namespaceMappings.Length)
                    {
                        index = m_namespaceMappings[index];
                    }
                }

                return new NodeId(nid.Identifier, (ushort)index);
            }

            return new ExpandedNodeId(nid.Identifier, 0, uri, (uint)serverIndex);
        }