.Net Maui date xml 反序列化在 Android 中失败,但在 Windows 中工作

问题描述 投票:0回答:1

我有一个 .Net Maui 混合项目,它调用返回 XML 的 API。 API 返回 xml,我使用下面的代码反序列化为对象:

var serializer = new XmlSerializer(typeof(List<FullQuoteResponseModel>));
var annuityIncomes = (List<FullQuoteResponseModel>)serializer.Deserialize(new StringReader(xml));

当我在 Windows 中运行时,它可以正常工作,但是当我部署到 Android 时,反序列化失败并出现以下错误:字符串“28-05-2024”未被识别为有效的日期时间。

xml 中的日期如下所示:

<expiry_date>28-04-2024</expiry_date>

在我的对象中,我有要处理的序列化属性,如下所示,该属性在 Windows 中工作,但在 Android 中失败

[XmlIgnore]
public DateTime? ExpiryDate { get; set; }

[XmlElement("expiry_date", IsNullable = true)]
public string ExpiryDateString
{
  get
  {
    DateTime? expiryDate = this.ExpiryDate;
    ref DateTime? local = ref expiryDate;
    return !local.HasValue ? (string) null : local.GetValueOrDefault().ToString("dd-MM-yyyy");
  }
  set
  {
    this.ExpiryDate = value == null ? new DateTime?() : new DateTime?(DateTime.Parse(value));
  }
}

为什么这在 Android 中失败,而现在在 Windows 中失败?

.net xml-parsing maui maui-blazor
1个回答
0
投票

我自己找到了答案,Jason 对 local 的评论引导我找到了答案。 在 Windows 中,不设置本地不会影响反序列化,并且英国格式 dd-MM-yyyy 的日期仍然有效(不知道为什么)。

但是,在 Android 中,响应中英国格式日期的反序列化导致了以下错误,据我了解,即它对于默认文化(en-US

)来说是无效的日期格式

字符串“28-05-2024”未被识别为有效的日期时间

为了解决此问题,我在 Android 平台的 MainActivity.cs 中将当前区域性更改为 en-GB,如下所示:

private void SetLocale()
{
    CultureInfo ci = new CultureInfo("en-GB");
    CultureInfo.DefaultThreadCurrentCulture = ci;
    Thread.CurrentThread.CurrentCulture = ci;
    Thread.CurrentThread.CurrentUICulture = ci;
}

反序列化现在将日期选择为正确的格式。希望这对某人有帮助

© www.soinside.com 2019 - 2024. All rights reserved.