Fix GetDataTypeId to return specific DataTypeId for IEncodeable types #3353
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Proposed changes
DataTypes.GetDataTypeId(typeof(EUInformation))returnedi=22(Structure) instead ofi=887(EUInformation). The method failed to extract specific TypeIds from IEncodeable types, returning the generic Structure base type for all encodeable objects.Changes
Modified
TypeInfo.GetDataTypeId(Type type)to instantiate IEncodeable types and extract their TypeId:Implementation:
Activator.CreateInstanceand extract TypeId propertyTests:
Related Issues
Types of changes
Checklist
Further comments
The fix uses reflection to instantiate types at runtime rather than maintaining a hardcoded mapping. This approach scales to custom IEncodeable types and aligns with the existing instance-based
GetDataTypeId(object value)implementation, which already extracts TypeId from IEncodeable instances.Performance impact is minimal—instantiation occurs only once per type when GetDataTypeId is called with a Type parameter, and only for IEncodeable types that would otherwise return Structure.
Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.