在 Xamarin 应用程序的发布模式下出现 NullReferenceException

3

在向我的REST API发出简单的POST请求时,我将对象序列化为JSON,如下所示:

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

在调试模式下一切正常,但在发布模式下,jsonPayload变量为空,在我的try/catch中我收到了NullReferenceException。为什么这个变量的值在Debug/Release中不同,如何解决?
这是一个Android应用程序,我已经启用了Internet权限。

尝试清理解决方案,删除Release配置中的优化和链接。 - Alex.F
3个回答

5
很可能您的问题是由于Xamarin Linker从您的代码中剥离了"未使用的程序集"引起的。默认的链接设置对发布版本和调试版本是不同的,这可能是您看到这种差异的原因。

尝试将 "Linking"选项(您可以在Android Options下的android项目的项目设置中找到)设置为SDK Assemblies OnlyNone,然后查看是否有效。


@Alexandre 很高兴能帮到你,我之前也遇到过一个非常类似的问题,直到我意识到问题出在哪里。 - Jack
Xamarin及其BUG,有时候使用起来非常令人沮丧,需要很多变通方法! - Alexandre
Newtonsoft.Json在运行时依赖于System.Core吗? 这是我的堆栈跟踪,但即使我看到它,我也不会理解。https://gist.github.com/headsvk/99f7754dc2fdf28175ba - headsvk
谢谢,省了我很多时间! - MShah
链接=无-对我有效。谢谢,我为这个问题花了一整天的时间。 - Winteriscoming
显示剩余4条评论

1

我不得不放弃使用匿名对象,因为我不知道为什么JSON.NETRelease模式下会导致这个错误。重新按照以下方式实现后,一切都正常了。有人知道为什么吗?;)

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" />

我只是暂时将包反转作为解决方案。很想听听对这个问题的见解和解决方案!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接