【问题标题】:Deserializing the JSON object in c#在 C# 中反序列化 JSON 对象
【发布时间】:2017-02-13 14:25:38
【问题描述】:

我的问题可能读起来很长,但我相信对于熟悉 Visual Studio 环境的人来说,解决方案非常简单。我很安静,这不是我们的研究领域,所以我们遇到了一些麻烦。我很乐意得到任何帮助!

我遇到了以下问题:

我正在尝试反序列化以下 JSON 格式:

[
    {
        "id": 1,
        "active": true,
        "air_drop_pos": {
            "latitude": 38.141833,
            "longitude": -76.425263
        },
        "fly_zones": [
            {
                "altitude_msl_max": 200.0,
                "altitude_msl_min": 100.0,
                "boundary_pts": [
                    {
                        "latitude": 38.142544,
                        "longitude": -76.434088,
                        "order": 1
                    },
                    {
                        "latitude": 38.141833,
                        "longitude": -76.425263,
                        "order": 2
                    },
                    {
                        "latitude": 38.144678,
                        "longitude": -76.427995,
                        "order": 3
                    }
                ]
            }
        ],
        "home_pos": {
            "latitude": 38.14792,
            "longitude": -76.427995
        },
        "mission_waypoints": [
            {
                "altitude_msl": 200.0,
                "latitude": 38.142544,
                "longitude": -76.434088,
                "order": 1
            }
        ],
        "off_axis_target_pos": {
            "latitude": 38.142544,
            "longitude": -76.434088
        },
        "emergent_last_known_pos": {
            "latitude": 38.145823,
            "longitude": -76.422396
        },
        "search_grid_points": [
            {
                "altitude_msl": 200.0,
                "latitude": 38.142544,
                "longitude": -76.434088,
                "order": 1
            }
        ]
    }
]

使用命令: 编辑 -> 选择性粘贴 -> 将 JSON 粘贴为类 我已经创建了接收所有信息所需的类。

然后在 C# 中我使用以下代码来反序列化数据:

using (webResponse3 = (HttpWebResponse)webRequest3.GetResponse()) 
{
     using (var stream = webResponse3.GetResponseStream())
     {
         using (var reader = new StreamReader(stream))
         {
           RootobjectMissions outObject1 = (RootobjectMissions)new JsonSerializer().Deserialize(reader, typeof(RootobjectMissions));
         }
     }
}

我收到以下错误:

将格式更改为正确格式的可能方法是什么?源 JSON 看起来是一个进入数组类的数组。可能是什么问题?

感谢您的帮助!

【问题讨论】:

  • 能否请您将异常消息复制粘贴为文本并提供类定义代码。
  • 尝试 json2csharp.com 来生成你的类,这是反序列化失败的常见原因。
  • 您尚未提供您尝试反序列化的 C# 对象,因此我们无法提供帮助。获得一组真正的 JSON 的最简单方法是复制您的 JSON 并使用 Visual Studio 将 JSON 粘贴为类。

标签: c# json serialization


【解决方案1】:

我不知道 RootobjectMissions 但我认为反序列化需要字符串才能工作而不是流阅读器所以

改变这个:

using (var reader = new StreamReader(stream))
     {
       RootobjectMissions outObject1 = (RootobjectMissions)new JsonSerializer().Deserialize(reader, typeof(RootobjectMissions));
     }

到这里:

using (var reader = new StreamReader(stream))
     {
       RootobjectMissions outObject1 = (RootobjectMissions)new JsonSerializer().Deserialize(reader.ReadToEnd(), typeof(RootobjectMissions));
     }

【讨论】:

    【解决方案2】:

    我使用 json2csharp.com 创建示例类。将文件内容反序列化为“任务”实例数组:

        class Program
        {
            static void Main(string[] args)
            {
                using (var file = File.OpenRead("data.json"))
                {
                    using (var reader = new StreamReader(file))
                    {
                        var content = reader.ReadToEnd();
                        var missions = JsonConvert.DeserializeObject<Mission[]>(content);
                        System.Console.WriteLine(missions);
                    }
                }
            }
        }
    
        public class AirDropPos
        {
            public double latitude { get; set; }
            public double longitude { get; set; }
        }
    
        public class BoundaryPt
        {
            public double latitude { get; set; }
            public double longitude { get; set; }
            public int order { get; set; }
        }
    
        public class FlyZone
        {
            public double altitude_msl_max { get; set; }
            public double altitude_msl_min { get; set; }
            public List<BoundaryPt> boundary_pts { get; set; }
        }
    
        public class HomePos
        {
            public double latitude { get; set; }
            public double longitude { get; set; }
        }
    
        public class MissionWaypoint
        {
            public double altitude_msl { get; set; }
            public double latitude { get; set; }
            public double longitude { get; set; }
            public int order { get; set; }
        }
    
        public class OffAxisTargetPos
        {
            public double latitude { get; set; }
            public double longitude { get; set; }
        }
    
        public class EmergentLastKnownPos
        {
            public double latitude { get; set; }
            public double longitude { get; set; }
        }
    
        public class SearchGridPoint
        {
            public double altitude_msl { get; set; }
            public double latitude { get; set; }
            public double longitude { get; set; }
            public int order { get; set; }
        }
    
        public class Mission
        {
            public int id { get; set; }
            public bool active { get; set; }
            public AirDropPos air_drop_pos { get; set; }
            public List<FlyZone> fly_zones { get; set; }
            public HomePos home_pos { get; set; }
            public List<MissionWaypoint> mission_waypoints { get; set; }
            public OffAxisTargetPos off_axis_target_pos { get; set; }
            public EmergentLastKnownPos emergent_last_known_pos { get; set; }
            public List<SearchGridPoint> search_grid_points { get; set; }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多