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

如何将指定URL的JSON数据反序列化为目标类结构?

问题分析与解决方案

你的代码核心问题在于:目标URL返回的是Region对象的数组,但现有逻辑试图将其反序列化为单个Region实例,同时Rootobject初始化后regions属性为null,直接赋值索引会触发空引用异常。以下是修正后的实现:

修正后的完整代码

public class IndexModel : PageModel
{
    // 用于页面展示的数据源属性
    public Rootobject RegionData { get; set; }

    public void OnGet()
    {
        RegionData = new Rootobject();
        // 直接反序列化为Region数组并赋值
        RegionData.regions = _download_serialized_json_data<Region[]>("https://visservice.meteoalarm.org/api/v1/regions?language=ATOM");
    }

    // 通用泛型方法,支持任意类型的JSON反序列化
    private static T _download_serialized_json_data<T>(string url) where T : new()
    {
        using (var w = new WebClient())
        {
            var json_data = string.Empty;
            try
            {
                json_data = w.DownloadString(url);
            }
            catch (Exception)
            {
                // 可添加日志记录,方便排查下载失败问题
            }
            return !string.IsNullOrEmpty(json_data) ? JsonConvert.DeserializeObject<T>(json_data) : new T();
        }
    }

    public class Rootobject
    {
        public Region[] regions { get; set; }
    }

    public class Region
    {
        public bool active { get; set; }
        public float[][] bb { get; set; }
        public string code { get; set; }
        public string name { get; set; }
    }
}

关键调整说明

  • 泛型方法_download_serialized_json_data改为支持任意类型,无需硬编码返回单个Region,适配数组类型的反序列化需求。
  • 新增RegionData属性作为页面绑定的数据源,在Razor页面中可通过@Model.RegionData.regions遍历所有区域数据进行展示。
  • 移除了原代码中对regions[0]的直接赋值,避免空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:20:29