2014-12-02 3 views
3

В простом запросе POST на мой REST API я делаю сериализацию объекта в JSON следующим образом:NullReferenceException в режиме выпуска приложения Xamarin

var userDto = new { user = new { login = Username, password = Password } }; 
var jsonPayload = JsonConvert.SerializeObject(userDto, Formatting.Indented); 

в режиме отладки все работает отлично, но в режиме выпуска jsonPayload переменная null и в моем try/catch я получаю NullReferenceException. Почему значение этой переменной отличается в Debug/Release и как ее решить?

Это приложение для Android, и у меня есть разрешение на использование Интернета.

+0

попробуйте очистить решение, удалив оптимизацию и связываясь в конфигурациях 'Release' –

ответ

1

Мне пришлось уйти с использованием анонимного объекта, потому что я не знаю, почему JSON.NET в Release режиме вызывает эту ошибку. После переопределения его, как следует, все работает нормально. Кто-нибудь знает, почему? ;)

UserSignInModel uDTO = new UserSignInModel() 
      { 
       user = new UserSignInDTO() 
       { 
        login = Username, 
        password = Password, 
       } 
      }; 

var jsonPayload = JsonConvert.SerializeObject(uDTO, Formatting.Indented); 
1

У меня такая же ошибка, но я не нашел для нее реального решения. После сужения, когда эта проблема начала появляться, я узнал, что это произошло после обновления пакета json.net.

Это разница, до:

<package id="Newtonsoft.Json" version="6.0.3" targetFramework="MonoAndroid403" /> 

После:

<package id="Newtonsoft.Json" version="6.0.6" targetFramework="MonoAndroid50" /> 

Я просто перевернул пакет в качестве временного решения прямо сейчас. Хотелось бы услышать некоторое понимание и решение этой проблемы!

3

Скорее всего, ваш вопрос связан с Xamarin Linker, удаляя «неиспользуемые сборки» от вас код. Настройка ссылок по умолчанию отличается для версий выпуска и отладки, что, вероятно, является причиной того, что вы видите эту разницу.

установка «Linking» вариант Try (вы можете найти его в настройки проекта для андроид проекта под параметры Android) в SDK Ассамблей Только или None и посмотреть, если это работает.

+0

Установите только« сборки SDK »и добавьте System.Core в« Пропустить сборку сборок ». Это единственный способ работать. Tks Jack – Alexandre

+0

@ Alexandre Рад помочь, я столкнулся с очень похожим вопросом, пока не понял, в чем проблема. – Jack

+0

Xamarin и это BUG, ​​иногда это очень сложно работать, так много обходных решений! – Alexandre