神勇英明的大侠们,使用Xamarin.forms开发了一个比较复杂的app。
1、引用了NetStandard
2、调用后app接口使用的是NetStandard的HTTPClient
Debug部署一切ok,Release部署出现问题(所有项目都关闭了代码优化),描述如下:
1、调用后台http返回的json字符串反序列化有问题,貌似只序列化了第一层,使用的反序列化工具是Newtonsoft.Json 12.0.1;调用及反序列化封装在一个基础库,使用了泛型:
public async Task<XActionResult<GetCodeInfo>> GetVerifyCodeAsync()
{
return await HttpPost<GetCodeInfo>(SvcBaseAddress + "/GetVerifyCode", null);
}
protected async Task<XActionResult<T>> HttpPost<T>(string url, HttpContent content)
{
var rslt = new XActionResult<T>();
try
{
var setting = new JsonSerializerSettings()
{
MaxDepth=100
};
var res = await Client.PostAsync(url, content);
if (!res.IsSuccessStatusCode)
{
rslt.C = (int)CmnErrCode.HttpFailed;
rslt.D = "" + (int)res.StatusCode;
return rslt;
}
var r = await res.Content.ReadAsStringAsync();
rslt = JsonConvert.DeserializeObject<XActionResult<T>>(r, setting);
}
catch (Exception ex)
{
rslt.C = (int)CmnErrCode.Exception;
}
return rslt;
}
2、使用ViemModel绑定Image控件的Source属性显示图片,结果都不显示
<Image x:Name="imgVerifyCode" BackgroundColor="Blue" Source="{Binding Img}" WidthRequest="75" HeightRequest="35"></Image>
请大神么帮忙,求私下喝酒聊天吹牛B
public async Task<XActionResult<GetCodeInfo>> GetVerifyCodeAsync () {
return await HttpPost<GetCodeInfo> (SvcBaseAddress + "/GetVerifyCode", null);
}
protected async Task<XActionResult<T>> HttpPost<T> (string url, HttpContent content) {
var rslt = new XActionResult<T> ();
try {
var setting = new JsonSerializerSettings () {
MaxDepth = 100
};
var res = await Client.PostAsync (url, content);
if (!res.IsSuccessStatusCode) {
rslt.C = (int) CmnErrCode.HttpFailed;
rslt.D = "" + (int) res.StatusCode;
return rslt;
}
var r = await res.Content.ReadAsStringAsync ();
rslt = JsonConvert.DeserializeObject<XActionResult<T>> (r, setting);
} catch (Exception ex) {
rslt.C = (int) CmnErrCode.Exception;
}
return rslt;
}
没说清楚,Img就是rslt的值么?Debug时能拿到r的值么?提供出来,或拿出来单独测试,排除其他干扰。
感谢。Debug下一切正常。
var r = await res.Content.ReadAsStringAsync ();
rslt = JsonConvert.DeserializeObject<XActionResult<T>> (r, setting);
Release下这里反序列化就有问题,反序列化只给第一层数据赋值,第二层都是null
@ray.iot: 你得告诉我们r是什么,XActionResult长什么样我们才能分析。正常情况下Debug和Realse只是编译器的区别,只要我们代码规范,一般不会有问题。遇到这种情况,建议自查:
另外你可以去https://github.com/JamesNK/Newtonsoft.Json上开一个Issue,请教项目组的成员,前提你得提供可复现的代码,建议把代码整理成一个Demo,提供给大家。
@楚人Leo: 非常感谢,我发你一份代码吧。我的qq:2482366007
@ray.iot: 已加
信息太少。
看看android那个日志信息。
找到了部分原因,项目属性里面不要勾选代码优化以及Multi-Dex,还有部分是vs原因,清理项目,重启电脑等等
Xamarin.forms中序列化与反序列化.如果model没有标记DataContract和DataMember在release下会反序列化失败。在debug下没问题。好坑