You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Forms中Newtonsoft.Json反序列化List<Meets>始终为null的问题

解决Xamarin.Forms中JSON反序列化属性为null及成员找不到的问题

我来帮你梳理这个跨平台反序列化的坑——这种Xamarin和控制台表现不一致的情况确实挺常见的,咱们一步步拆解问题:

一、先搞定「Meets属性始终为null」的核心问题

控制台能正常解析但Xamarin不行,大概率是序列化配置的差异导致的:

1. 检查序列化库的配置(以Newtonsoft.Json为例)

控制台项目可能默认或者你隐性配置了驼峰命名解析,但Xamarin里没做同样的设置。比如JSON里的键是"meets",你的类属性是Meets,这时候需要显式指定驼峰契约解析器:

// 在Xamarin的反序列化代码里加上配置
var jsonSettings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver(),
    NullValueHandling = NullValueHandling.Ignore
};
var rootObj = JsonConvert.DeserializeObject<RootObject>(yourJsonString, jsonSettings);

2. 如果用的是System.Text.Json

Xamarin里的System.Text.Json版本可能默认不支持大小写不敏感匹配,需要手动配置:

var serializerOptions = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true, // 忽略大小写匹配
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase // 驼峰键映射到PascalCase属性
};
var rootObj = JsonSerializer.Deserialize<RootObject>(yourJsonString, serializerOptions);

二、解决「无法找到VenueName成员」的报错

这个问题通常和下面几个点有关:

  • 属性访问修饰符不对:确保RootObject里的VenueName是public的,私有属性序列化器默认是看不到的。
  • JSON键和属性名不匹配:如果JSON里的键是"venueName"而你的属性是VenueName,要么靠上面的大小写忽略配置,要么显式标记映射:
    public class RootObject
    {
        public int ErrorCode { get; set; }
        public List<Meet> Meets { get; set; }
        [JsonProperty("venueName")] // Newtonsoft.Json用这个
        // [JsonPropertyName("venueName")] // System.Text.Json用这个
        public string VenueName { get; set; }
    }
    
  • Xamarin缓存问题:有时候项目编译缓存会导致类定义没更新,试试清理解决方案,删除bin和obj文件夹,再重新编译。

三、额外排查点:确认JSON内容完全一致

有时候Xamarin里获取的JSON可能有转义字符、编码问题,或者和控制台用的不是同一份。建议在Xamarin里用Debug.WriteLine(yourJsonString)把JSON打出来,和控制台里的对比,确保内容完全相同。

内容的提问来源于stack exchange,提问作者pinman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:53:18