2017-01-26 6 views
0

Ниже мой класс:Невозможно десериализации JSON массив

public class Employee : Base 
{ 
    public int Id { get; set; } 
    public string Fname { get; set; } 
    public DepartmentModel Department { get; set; } 
} 

public class DepartmentModel : Base 
{ 
    public int Id { get; set; } 
    public string DepartmentName { get; set; } 
    public List<Location> Locations { get; set; } 
} 

public class Locations 
{ 
    public string Area { get; set; } 
    public string StreetNo { get; set; } 
    public string Nearby { get; set; } 
} 

возвращение Ответ службы:

var response = new 
{ 
    id = 100, 
    department = new 
    { 
     id = 200, 
     departmentName = "Abc", 
     locations = new[] 
     { 
      Employee.Department.Locations 
        .Select 
        (
         lo => new 
         { 
          area = lo.Area, 
          streetNo = lo.streetNo, 
          nearby = lo.Nearby 
         } 
        ).ToList() 
     } 
    } 
}; 

return JsonConvert.SerializeObject(response); 

Теперь, когда я пытаюсь десериализации это выше JSON в мой класс Employee, как показано ниже:

var deserialize = JsonConvert.DeserializeObject<Employee>(response.ToString()); 

Ошибка:

enter image description here

Как я могу десериализовать это выше JSON?

+2

Пожалуйста показать * фактический JSON возвращенный * вместо того, как вы вернули его. В идеале укажите это как [mcve]. –

+2

Вам просто нужно удалить новый ключ [] для определения местоположения, потому что выражение LINQ заканчивается .ToList() уже возвращает список элементов. –

ответ

3

Проблема заключается здесь:

locations = new[] 
      { 
       Employee.Department.Locations 
         .Select 
         (
          lo => new 
          { 
           area = lo.Area, 
           streetNo = lo.streetNo, 
           nearby = lo.Nearby 
          } 
         ).ToList() 
      } 

выражение LINQ заканчивается .ToList() и, таким образом, уже возвращает список элементов. Затем вы обертываете это с помощью new[] в массиве. Таким образом, вместо массива Location s JSON представляет собой массив из массивомLocation s.

+0

Огромное вам спасибо за ответ, и да, вы правы. Еще раз спасибо вам большое и, пожалуйста, продолжайте помогать вот так :) –

1

Попробуйте удалить new[]. Вы не хотите места, чтобы быть массивом списков

locations = Employee.Department.Locations 
           .Select(lo => new 
              { 
               area = lo.Area, 
               streetNo = lo.streetNo, 
               nearby = lo.Nearby 
              } 
             ).ToList() 
1

Вам нужно создать экземпляр new Employee() и использовать тот же корпус, как классы:

var response = new Employee() // Instantiates Employee to ensure correct properties used. 
{ 
    Id = 100, // Has PascalCase. 
    Department = new DepartmentModel() 
    { 
     Id = 200, 
     DepartmentName = "Abc", 
     Locations = Employee.Department.Locations 
          .Select(lo => new Location 
             { 
              Area = lo.Area, 
              StreetNo = lo.StreetNo, 
              Nearby = lo.Nearby 
             } 
            ).ToList() 
    } 
}; 
Смежные вопросы