在我的REST API的简单POST请求中,我正在对JSON进行对象序列化,如下所示:
var userDto = new { user = new { login = Username, password = Password } };
var jsonPayload = JsonConvert.SerializeObject(userDto, Formatting.Indented);
在调试模式下一切正常,但在发布模式jsonPayload
变量为null,在我的try / catch中我得到NullReferenceException
。为什么这个变量的值在Debug / Release中有所不同以及如何解决这个问题?
这是Android应用程序,我启用了Internet权限。
答案 0 :(得分:3)
您的问题很可能是因为Xamarin Linker从您的代码中剥离了“未使用的程序集”。发布和调试版本的默认链接设置不同,这可能就是您看到这种差异的原因。
尝试设置“链接”选项(您可以在Android选项下的Android项目的项目设置下找到它)到 SDK Assemblies Only 或 None 并查看是否这样可行。
答案 1 :(得分:1)
我不得不使用匿名对象辞职,因为我不知道JSON.NET
模式中Release
导致此错误的原因。重新实现后,一切正常。有人知道为什么吗? ;)
UserSignInModel uDTO = new UserSignInModel()
{
user = new UserSignInDTO()
{
login = Username,
password = Password,
}
};
var jsonPayload = JsonConvert.SerializeObject(uDTO, Formatting.Indented);
答案 2 :(得分:1)
我得到了同样的错误,但我没有找到真正的解决方案。在此问题开始出现后缩小范围时,我发现更新json.net软件包后发生了这种情况。
这是区别,之前:
<package id="Newtonsoft.Json" version="6.0.3" targetFramework="MonoAndroid403" />
后:
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="MonoAndroid50" />
我现在只是将包逆转为临时解决方案。很想听听这个问题的一些见解和解决方案!