[CSHARP-702] Stack trace when casting Created: 13/Mar/13  Updated: 05/Apr/19  Resolved: 13/Mar/13

Status: Closed
Project: C# Driver
Component/s: None
Affects Version/s: 1.7.1
Fix Version/s: 1.8

Type: Task Priority: Major - P3
Reporter: Robert DeSimone Assignee: Craig Wilson
Resolution: Done Votes: 2
Labels: question
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Windows 7 64bit, .NET 4.0



 Description   

Using the following method:

public static T ToId<T>(string meetingId)
{
if (typeof(T) == typeof(Guid))

{ Guid guidId; Guid.TryParse(meetingId, out guidId); return (T)Convert.ChangeType(guidId, typeof(T)); }

else if (typeof(T) == typeof(ObjectId))

{ ObjectId objectId; ObjectId.TryParse(meetingId, out objectId); return (T)Convert.ChangeType(objectId, typeof(T)); }

return default(T);
}

When upgrading from the MongoDb .NET driver 1.5 to version 1.7.1.4791, we're receiving the following stack trace:

Message: Specified cast is not valid.

Stack Trace:
at MongoDB.Bson.ObjectId.System.IConvertible.ToType(Type conversionType, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType)
at Tntp.Controls.ViewModels.Meeting.MeetingBaseViewModel.ToId[T](String meetingId) in C:\Dev\Tntp.TeacherTrack2\Tntp.Controls\ViewModels\Meeting\MeetingBaseViewModel.cs:line 72
at Tntp.Controls.ViewModels.Meeting.MeetingViewModel.GetMeetings(MeetingTypes meetingTypes, String meetingParentId) in C:\Dev\Tntp.TeacherTrack2\Tntp.Controls\ViewModels\Meeting\MeetingSessionViewModel.cs:line 28
at Tntp.Web.Admin.UserControls.Meetings.MeetingDetails.Page_Load(Object sender, EventArgs e) in C:\Dev\Tntp.TeacherTrack2\Tntp.Web\Admin\UserControls\Meetings\MeetingDetails.ascx.cs:line 34
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)



 Comments   
Comment by auto [ 13/Mar/13 ]

Author:

{u'date': u'2013-03-13T16:27:14Z', u'name': u'Craig Wilson', u'email': u'craiggwilson@gmail.com'}

Message: CSHARP-702: fix ObjectId conversion to itself.
Branch: master
https://github.com/mongodb/mongo-csharp-driver/commit/c2f17f19ef5a39811983c0fbd53d413f11443efb

Comment by Robert DeSimone [ 13/Mar/13 ]

Thanks Craig. That seemed to do the trick! Nice response time!

Comment by Craig Wilson [ 13/Mar/13 ]

Fix in code review.

Comment by Craig Wilson [ 13/Mar/13 ]

I can confirm this. In the meantime, you can change your code in the ObjectId portion to this:

else if (typeof(T) == typeof(ObjectId))
{ 
    ObjectId objectId; 
    ObjectId.TryParse(meetingId, out objectId); 
    return (T)(object)objectId;
}

Generated at Wed Feb 07 21:37:35 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.