2017-02-13 5 views
-1

Проблема может быть долгой, но я уверен, что решение довольно просто для тех, кто знаком с средой Visual Studio. Я спокоен, и это не наша область исследований, поэтому у нас есть некоторые проблемы. Я буду рад получить любую помощь!Удаление десериализации объекта JSON в C#

я столкнулся со следующей проблемой:

Я пытаюсь Deserialize следующий формат 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 
      } 
     ] 
    } 
] 

Использование команды: Edit -> Paste Special -> Вставить 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)); 
     } 
    } 
} 

И я получаю следующее сообщение об ошибке:

The error

Что возможный способ изменить формат к правильному? Источник JSON выглядит как массив, который входит в класс класса. В чем проблема?

Я ценю любую помощь!

+2

Не могли бы вы скопировать ссылку на исключение в виде текста и предоставить код для определения классов. – Sherlock

+0

Попробуйте json2csharp.com для генерации ваших классов, это распространенная причина, по которой десериализация терпит неудачу. – abdul

+2

Вы не предоставили свои объекты C#, которые вы пытаетесь десериализировать, чтобы мы не могли помочь. Самый простой способ получить реальный набор из них - скопировать JSON и использовать Visual Studio для вставки JSON в качестве классов. – DavidG

ответ

-1

Я не знаю RootobjectMissions, но я думаю, что Deserialize нужно строку работать не поток читателя так

Изменить это:

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)); 
    } 
-1

я использовал 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; } 
    } 
Смежные вопросы