C# 在c中反序列化JSON对象#

C# 在c中反序列化JSON对象#,c#,json,serialization,C#,Json,Serialization,我的问题可能很难理解,但我相信对于那些熟悉VisualStudio环境的人来说,解决方案相当简单。我是个新手,这不是我们的研究领域,所以我们遇到了一些麻烦。我很乐意接受任何帮助 我遇到了以下问题: 我正在尝试反序列化以下JSON格式: [ { "id": 1, "active": true, "air_drop_pos": { "latitude": 38.141833, "longitude

我的问题可能很难理解,但我相信对于那些熟悉VisualStudio环境的人来说,解决方案相当简单。我是个新手,这不是我们的研究领域,所以我们遇到了一些麻烦。我很乐意接受任何帮助

我遇到了以下问题:

我正在尝试反序列化以下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看起来是一个进入数组类的数组。有什么问题吗


谢谢你的帮助

我不知道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));
     }

我使用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; }
    }
类程序
{
静态void Main(字符串[]参数)
{
使用(var file=file.OpenRead(“data.json”))
{
使用(var reader=newstreamreader(文件))
{
var content=reader.ReadToEnd();
var missions=JsonConvert.DeserializeObject(内容);
系统控制台写入线(任务);
}
}
}
}
公营空投站
{
公共双纬度{get;set;}
公共双经度{get;set;}
}
公共类边界
{
公共双纬度{get;set;}
公共双经度{get;set;}
公共整数顺序{get;set;}
}
公共飞行区
{
公共双高度\u msl\u max{get;set;}
公共双高度\u msl\u min{get;set;}
公共列表边界{get;set;}
}
公共类HomePos
{
公共双纬度{get;set;}
公共双经度{get;set;}
}
公共类任务航路点
{
公共双高度{get;set;}
公共双纬度{get;set;}
公共双经度{get;set;}
公共整数顺序{get;set;}
}
AxisTargetPos的公共类
{
公共双纬度{get;set;}
公共双经度{get;set;}
}
公共类EmergentLastKnownPos
{
公共双纬度{get;set;}
公共双经度{get;set;}
}
公共类搜索网格点
{
公共双高度{get;set;}
公共双纬度{get;set;}
公共双经度{get;set;}
公共整数顺序{get;set;}
}
公课使命
{
公共int id{get;set;}
公共bool活动{get;set;}
公共空投位置空投位置{get;set;}
公共列表飞行区{get;set;}
公共HomePos home_pos{get;set;}
公共列表任务_航路点{get;set;}
public OffAxisTargetPos off_axis_target_pos{get;set;}
公共emergentlastnownpos emergent_last_known_pos{get;set;}
公共列表搜索网格点{get;set;}
}

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