diff --git a/Stack/Opc.Ua.Core/Types/Encoders/BinaryDecoder.cs b/Stack/Opc.Ua.Core/Types/Encoders/BinaryDecoder.cs index 7daeda9aa0..96e6605cd4 100644 --- a/Stack/Opc.Ua.Core/Types/Encoders/BinaryDecoder.cs +++ b/Stack/Opc.Ua.Core/Types/Encoders/BinaryDecoder.cs @@ -1539,6 +1539,14 @@ namespace Opc.Ua if (systemType != null) { encodeable = Activator.CreateInstance(systemType) as IEncodeable; + + // set type identifier for custom complex data types before decode. + IComplexTypeInstance complexTypeInstance = encodeable as IComplexTypeInstance; + + if (complexTypeInstance != null) + { + complexTypeInstance.TypeId = extension.TypeId; + } } // get the length. diff --git a/Stack/Opc.Ua.Core/Types/Encoders/IComplexTypeInstance.cs b/Stack/Opc.Ua.Core/Types/Encoders/IComplexTypeInstance.cs new file mode 100644 index 0000000000..48fbdb64dd --- /dev/null +++ b/Stack/Opc.Ua.Core/Types/Encoders/IComplexTypeInstance.cs @@ -0,0 +1,28 @@ +/* Copyright (c) 1996-2016, OPC Foundation. All rights reserved. + The source code in this file is covered under a dual-license scenario: + - RCL: for OPC Foundation members in good-standing + - GPL V2: everybody else + RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ + GNU General Public License as published by the Free Software Foundation; + version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 + This source code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +namespace Opc.Ua +{ + /// + /// Interface implemented by complex data type instances. + /// + public interface IComplexTypeInstance + { + /// + /// Gets or sets the UA type identifier for the encodeable type. + /// + /// + /// The UA type identifier. + /// + ExpandedNodeId TypeId { get; set; } + } +}