Иногда (примерно 1 из 6 раз) при попытке создать, а затем сохранить parseObject я получаю следующее исключение
at System.DateTime.ParseExact (System.String s, System.String[] formats, IFormatProvider provider, DateTimeStyles style) [0x00000] in :0 at System.DateTime.ParseExact (System.String s, System.String format, IFormatProvider provider, DateTimeStyles style) [0x00000] in :0 at System.DateTime.ParseExact (System.String s, System.String format, IFormatProvider provider) [0x00000] in :0 at Parse.ParseClient.ParseDate (System.String input) [0x00000] in :0 at Parse.ParseObject.MergeMagicFields (IDictionary`2 data) [0x00000] in :0 at Parse.ParseObject.MergeFromServer (IDictionary`2 data) [0x00000] in :0 at Parse.ParseObject.MergeAfterSave (IDictionary`2 result) [0x00000] in :0 at Parse.ParseObject+c__DisplayClass1f.b__1b (System.Threading.Tasks.Task`1 t) [0x00000] in :0 at System.Threading.Tasks.TaskActionInvoker+FuncTaskInvoke`2[System.Tuple`2[System.Net.HttpStatusCode,System.Collections.Generic.IDictionary`2[System.String,System.Object]],System.Threading.Tasks.Task`1[System.Tuple`2[System.Net.HttpStatusCode,System.Collections.Generic.IDictionary`2[System.String,System.Object]]]].Invoke (System.Threading.Tasks.Task owner, System.Object state, System.Threading.Tasks.Task context) [0x00000] in :0 at System.Threading.Tasks.Task.InnerInvoke () [0x00000] in :0 at System.Threading.Tasks.Task.ThreadStart () [0x00000] in :0
Я использую .net parse версии 1.3.1.
Код, вызывающий ошибку, выглядит так:
ParseObject po = new ParseObject( "Journey" );
po.ObjectId = journey.ID;
po["audioCount"] = journey.AudioFiles.Count;
po["locationPointCount"] = journey.LocationPoints.Count;
po["photoCount"] = journey.PhotoFiles.Count;
po["videoCount"] = journey.VideoFiles.Count;
po["startTime"] = journey.StartTime;
po["endTime"] = journey.EndTime;
po["notes"] = journey.Notes;
po["isInProgress"] = journey.IsInProgress;
po.AddRangeUniqueToList( "audioFiles", audioFiles );
po.AddRangeUniqueToList( "photoFiles", photoFiles );
po.AddRangeUniqueToList( "videoFiles", videoFiles );
po.ACL = new ParseACL(ParseUser.CurrentUser);
po["user"] = ParseUser.CurrentUser;
await po.SaveAsync();
Спасибо за любую помощь
Изменить: удаление «startTime» и «endTime» из ParseObject не решает проблему.
Редактировать: Для получения дополнительной информации, вот разборка метода «MergeMagicFields», который, по-видимому, вызывает проблему. Единственные пути, которые заканчиваются вызовом «ParseData», по-видимому, связаны с анализом внутренних данных.
internal virtual void MergeMagicFields( IDictionary<string, object> data )
{
lock( this.mutex )
{
if( data.ContainsKey( "objectId" ) )
{
this.SetObjectIdInternal( data["objectId"] as string );
this.hasBeenFetched = true;
this.OnPropertyChanged( "IsDataAvailable" );
data.Remove( "objectId" );
}
if( data.ContainsKey( "createdAt" ) )
{
this.CreatedAt = new DateTime?( ParseClient.ParseDate( data["createdAt"] as string ) );
data.Remove( "createdAt" );
}
if( data.ContainsKey( "updatedAt" ) )
{
this.UpdatedAt = new DateTime?( ParseClient.ParseDate( data["updatedAt"] as string ) );
data.Remove( "updatedAt" );
}
if( data.ContainsKey( "ACL" ) )
{
ParseACL parseACL = new ParseACL( data["ACL"] as IDictionary<string, object> );
this.serverData["ACL"] = parseACL;
this.AddToHashedObjects( parseACL );
data.Remove( "ACL" );
}
}
}