Странное поведение при сериализации Contacts.Contact на Win 10 Mobile с JSON.NET - PullRequest
0 голосов
/ 27 октября 2019

На странице с выделенным кодом в приложении UWP я сериализую объект типа Windows.ApplicationModel.Contacts.Contact и отправляю результаты в объекте ValueSet обратно в другое приложение, используя метод ProtocolForResultsOperation.ReportCompleted(ValueSet) (приложение запускается первоначальноеще один).

Вот код:

protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            var protocolForResultsArgs = e.Parameter as ProtocolForResultsActivatedEventArgs;
            if (protocolForResultsArgs != null)
            {
                var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
                Contact contact = await contactPicker.PickContactAsync();
                if (contact != null)
                {
                    string c = JsonConvert.SerializeObject(contact);
                    ValueSet result = new ValueSet();
                    result.Add("ContactTaken", c);
                    protocolForResultsArgs.ProtocolForResultsOperation.ReportCompleted(result);
                }
                else
                {
                    ValueSet result = new ValueSet();
                    result.Add("ContactTaken", "No contact selected");
                    protocolForResultsArgs.ProtocolForResultsOperation.ReportCompleted(result);
                }
            }
        }

Работает на ПК без проблем. Но когда я запускаю его на мобильном устройстве с Windows 10 Mobile (Lumia 640), происходит сбой!

И происходит сбой, даже если я возвращаю что-то отличное от сериализованной строки JSON, т. Е. Также происходит сбой следующим образом:

protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            var protocolForResultsArgs = e.Parameter as ProtocolForResultsActivatedEventArgs;
            if (protocolForResultsArgs != null)
            {
                var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
                Contact contact = await contactPicker.PickContactAsync();
                if (contact != null)
                {
                    string c = JsonConvert.SerializeObject(contact);
                    ValueSet result = new ValueSet();
                    result.Add("ContactTaken", "hello world");
                    protocolForResultsArgs.ProtocolForResultsOperation.ReportCompleted(result);
                }
                else
                {
                    ValueSet result = new ValueSet();
                    result.Add("ContactTaken", "No contact selected");
                    protocolForResultsArgs.ProtocolForResultsOperation.ReportCompleted(result);
                }
            }
        }

Поэтому, я думал, возможно, по какой-то причине не может сериализовать данный объект. Поэтому я попытался показать результаты сериализации в приложении, прежде чем возвращать их в приложение вызывающей стороны, т.е. следующим образом:

protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            var protocolForResultsArgs = e.Parameter as ProtocolForResultsActivatedEventArgs;
            if (protocolForResultsArgs != null)
            {
                var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
                Contact contact = await contactPicker.PickContactAsync();
                if (contact != null)
                {
                    string c = JsonConvert.SerializeObject(contact);
                    textBlock.text = c;
                }
                else
                {
                    ValueSet result = new ValueSet();
                    result.Add("ContactTaken", "No contact selected");
                    protocolForResultsArgs.ProtocolForResultsOperation.ReportCompleted(result);
                }
            }
        }

Сериализованный текст отображается правильно !!

Любое объяснениепожалуйста

...